<!doctype html>
<html>
<head>
<meta charset='UTF-8'><meta name='viewport' content='width=device-width initial-scale=1'>
<title>08_CNN</title><link href='https://fonts.loli.net/css?family=Open+Sans:400italic,700italic,700,400&subset=latin,latin-ext' rel='stylesheet' type='text/css' /><style type='text/css'>html {overflow-x: initial !important;}:root { --bg-color:#ffffff; --text-color:#333333; --select-text-bg-color:#B5D6FC; --select-text-font-color:auto; --monospace:"Lucida Console",Consolas,"Courier",monospace; --title-bar-height:20px; }
.mac-os-11 { --title-bar-height:28px; }
html { font-size: 14px; background-color: var(--bg-color); color: var(--text-color); font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; -webkit-font-smoothing: antialiased; }
body { margin: 0px; padding: 0px; height: auto; bottom: 0px; top: 0px; left: 0px; right: 0px; font-size: 1rem; line-height: 1.42857; overflow-x: hidden; background: inherit; tab-size: 4; }
iframe { margin: auto; }
a.url { word-break: break-all; }
a:active, a:hover { outline: 0px; }
.in-text-selection, ::selection { text-shadow: none; background: var(--select-text-bg-color); color: var(--select-text-font-color); }
#write { margin: 0px auto; height: auto; width: inherit; word-break: normal; overflow-wrap: break-word; position: relative; white-space: normal; overflow-x: visible; padding-top: 36px; }
#write.first-line-indent p { text-indent: 2em; }
#write.first-line-indent li p, #write.first-line-indent p * { text-indent: 0px; }
#write.first-line-indent li { margin-left: 2em; }
.for-image #write { padding-left: 8px; padding-right: 8px; }
body.typora-export { padding-left: 30px; padding-right: 30px; }
.typora-export .footnote-line, .typora-export li, .typora-export p { white-space: pre-wrap; }
.typora-export .task-list-item input { pointer-events: none; }
@media screen and (max-width: 500px) {
  body.typora-export { padding-left: 0px; padding-right: 0px; }
  #write { padding-left: 20px; padding-right: 20px; }
  .CodeMirror-sizer { margin-left: 0px !important; }
  .CodeMirror-gutters { display: none !important; }
}
#write li > figure:last-child { margin-bottom: 0.5rem; }
#write ol, #write ul { position: relative; }
img { max-width: 100%; vertical-align: middle; image-orientation: from-image; }
button, input, select, textarea { color: inherit; font: inherit; }
input[type="checkbox"], input[type="radio"] { line-height: normal; padding: 0px; }
*, ::after, ::before { box-sizing: border-box; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p, #write pre { width: inherit; }
#write h1, #write h2, #write h3, #write h4, #write h5, #write h6, #write p { position: relative; }
p { line-height: inherit; }
h1, h2, h3, h4, h5, h6 { break-after: avoid-page; break-inside: avoid; orphans: 4; }
p { orphans: 4; }
h1 { font-size: 2rem; }
h2 { font-size: 1.8rem; }
h3 { font-size: 1.6rem; }
h4 { font-size: 1.4rem; }
h5 { font-size: 1.2rem; }
h6 { font-size: 1rem; }
.md-math-block, .md-rawblock, h1, h2, h3, h4, h5, h6, p { margin-top: 1rem; margin-bottom: 1rem; }
.hidden { display: none; }
.md-blockmeta { color: rgb(204, 204, 204); font-weight: 700; font-style: italic; }
a { cursor: pointer; }
sup.md-footnote { padding: 2px 4px; background-color: rgba(238, 238, 238, 0.7); color: rgb(85, 85, 85); border-radius: 4px; cursor: pointer; }
sup.md-footnote a, sup.md-footnote a:hover { color: inherit; text-transform: inherit; text-decoration: inherit; }
#write input[type="checkbox"] { cursor: pointer; width: inherit; height: inherit; }
figure { overflow-x: auto; margin: 1.2em 0px; max-width: calc(100% + 16px); padding: 0px; }
figure > table { margin: 0px; }
tr { break-inside: avoid; break-after: auto; }
thead { display: table-header-group; }
table { border-collapse: collapse; border-spacing: 0px; width: 100%; overflow: auto; break-inside: auto; text-align: left; }
table.md-table td { min-width: 32px; }
.CodeMirror-gutters { border-right: 0px; background-color: inherit; }
.CodeMirror-linenumber { user-select: none; }
.CodeMirror { text-align: left; }
.CodeMirror-placeholder { opacity: 0.3; }
.CodeMirror pre { padding: 0px 4px; }
.CodeMirror-lines { padding: 0px; }
div.hr:focus { cursor: none; }
#write pre { white-space: pre-wrap; }
#write.fences-no-line-wrapping pre { white-space: pre; }
#write pre.ty-contain-cm { white-space: normal; }
.CodeMirror-gutters { margin-right: 4px; }
.md-fences { font-size: 0.9rem; display: block; break-inside: avoid; text-align: left; overflow: visible; white-space: pre; background: inherit; position: relative !important; }
.md-diagram-panel { width: 100%; margin-top: 10px; text-align: center; padding-top: 0px; padding-bottom: 8px; overflow-x: auto; }
#write .md-fences.mock-cm { white-space: pre-wrap; }
.md-fences.md-fences-with-lineno { padding-left: 0px; }
#write.fences-no-line-wrapping .md-fences.mock-cm { white-space: pre; overflow-x: auto; }
.md-fences.mock-cm.md-fences-with-lineno { padding-left: 8px; }
.CodeMirror-line, twitterwidget { break-inside: avoid; }
.footnotes { opacity: 0.8; font-size: 0.9rem; margin-top: 1em; margin-bottom: 1em; }
.footnotes + .footnotes { margin-top: 0px; }
.md-reset { margin: 0px; padding: 0px; border: 0px; outline: 0px; vertical-align: top; background: 0px 0px; text-decoration: none; text-shadow: none; float: none; position: static; width: auto; height: auto; white-space: nowrap; cursor: inherit; -webkit-tap-highlight-color: transparent; line-height: normal; font-weight: 400; text-align: left; box-sizing: content-box; direction: ltr; }
li div { padding-top: 0px; }
blockquote { margin: 1rem 0px; }
li .mathjax-block, li p { margin: 0.5rem 0px; }
li blockquote { margin: 1rem 0px; }
li { margin: 0px; position: relative; }
blockquote > :last-child { margin-bottom: 0px; }
blockquote > :first-child, li > :first-child { margin-top: 0px; }
.footnotes-area { color: rgb(136, 136, 136); margin-top: 0.714rem; padding-bottom: 0.143rem; white-space: normal; }
#write .footnote-line { white-space: pre-wrap; }
@media print {
  body, html { border: 1px solid transparent; height: 99%; break-after: avoid; break-before: avoid; font-variant-ligatures: no-common-ligatures; }
  #write { margin-top: 0px; padding-top: 0px; border-color: transparent !important; }
  .typora-export * { -webkit-print-color-adjust: exact; }
  .typora-export #write { break-after: avoid; }
  .typora-export #write::after { height: 0px; }
  .is-mac table { break-inside: avoid; }
}
.footnote-line { margin-top: 0.714em; font-size: 0.7em; }
a img, img a { cursor: pointer; }
pre.md-meta-block { font-size: 0.8rem; min-height: 0.8rem; white-space: pre-wrap; background: rgb(204, 204, 204); display: block; overflow-x: hidden; }
p > .md-image:only-child:not(.md-img-error) img, p > img:only-child { display: block; margin: auto; }
#write.first-line-indent p > .md-image:only-child:not(.md-img-error) img { left: -2em; position: relative; }
p > .md-image:only-child { display: inline-block; width: 100%; }
#write .MathJax_Display { margin: 0.8em 0px 0px; }
.md-math-block { width: 100%; }
.md-math-block:not(:empty)::after { display: none; }
.MathJax_ref { fill: currentcolor; }
[contenteditable="true"]:active, [contenteditable="true"]:focus, [contenteditable="false"]:active, [contenteditable="false"]:focus { outline: 0px; box-shadow: none; }
.md-task-list-item { position: relative; list-style-type: none; }
.task-list-item.md-task-list-item { padding-left: 0px; }
.md-task-list-item > input { position: absolute; top: 0px; left: 0px; margin-left: -1.2em; margin-top: calc(1em - 10px); border: none; }
.math { font-size: 1rem; }
.md-toc { min-height: 3.58rem; position: relative; font-size: 0.9rem; border-radius: 10px; }
.md-toc-content { position: relative; margin-left: 0px; }
.md-toc-content::after, .md-toc::after { display: none; }
.md-toc-item { display: block; color: rgb(65, 131, 196); }
.md-toc-item a { text-decoration: none; }
.md-toc-inner:hover { text-decoration: underline; }
.md-toc-inner { display: inline-block; cursor: pointer; }
.md-toc-h1 .md-toc-inner { margin-left: 0px; font-weight: 700; }
.md-toc-h2 .md-toc-inner { margin-left: 2em; }
.md-toc-h3 .md-toc-inner { margin-left: 4em; }
.md-toc-h4 .md-toc-inner { margin-left: 6em; }
.md-toc-h5 .md-toc-inner { margin-left: 8em; }
.md-toc-h6 .md-toc-inner { margin-left: 10em; }
@media screen and (max-width: 48em) {
  .md-toc-h3 .md-toc-inner { margin-left: 3.5em; }
  .md-toc-h4 .md-toc-inner { margin-left: 5em; }
  .md-toc-h5 .md-toc-inner { margin-left: 6.5em; }
  .md-toc-h6 .md-toc-inner { margin-left: 8em; }
}
a.md-toc-inner { font-size: inherit; font-style: inherit; font-weight: inherit; line-height: inherit; }
.footnote-line a:not(.reversefootnote) { color: inherit; }
.md-attr { display: none; }
.md-fn-count::after { content: "."; }
code, pre, samp, tt { font-family: var(--monospace); }
kbd { margin: 0px 0.1em; padding: 0.1em 0.6em; font-size: 0.8em; color: rgb(36, 39, 41); background: rgb(255, 255, 255); border: 1px solid rgb(173, 179, 185); border-radius: 3px; box-shadow: rgba(12, 13, 14, 0.2) 0px 1px 0px, rgb(255, 255, 255) 0px 0px 0px 2px inset; white-space: nowrap; vertical-align: middle; }
.md-comment { color: rgb(162, 127, 3); opacity: 0.8; font-family: var(--monospace); }
code { text-align: left; vertical-align: initial; }
a.md-print-anchor { white-space: pre !important; border-width: initial !important; border-style: none !important; border-color: initial !important; display: inline-block !important; position: absolute !important; width: 1px !important; right: 0px !important; outline: 0px !important; background: 0px 0px !important; text-decoration: initial !important; text-shadow: initial !important; }
.md-inline-math .MathJax_SVG .noError { display: none !important; }
.html-for-mac .inline-math-svg .MathJax_SVG { vertical-align: 0.2px; }
.md-math-block .MathJax_SVG_Display { text-align: center; margin: 0px; position: relative; text-indent: 0px; max-width: none; max-height: none; min-height: 0px; min-width: 100%; width: auto; overflow-y: hidden; display: block !important; }
.MathJax_SVG_Display, .md-inline-math .MathJax_SVG_Display { width: auto; margin: inherit; display: inline-block !important; }
.MathJax_SVG .MJX-monospace { font-family: var(--monospace); }
.MathJax_SVG .MJX-sans-serif { font-family: sans-serif; }
.MathJax_SVG { display: inline; font-style: normal; font-weight: 400; line-height: normal; zoom: 90%; text-indent: 0px; text-align: left; text-transform: none; letter-spacing: normal; word-spacing: normal; overflow-wrap: normal; white-space: nowrap; float: none; direction: ltr; max-width: none; max-height: none; min-width: 0px; min-height: 0px; border: 0px; padding: 0px; margin: 0px; }
.MathJax_SVG * { transition: none 0s ease 0s; }
.MathJax_SVG_Display svg { vertical-align: middle !important; margin-bottom: 0px !important; margin-top: 0px !important; }
.os-windows.monocolor-emoji .md-emoji { font-family: "Segoe UI Symbol", sans-serif; }
.md-diagram-panel > svg { max-width: 100%; }
[lang="flow"] svg, [lang="mermaid"] svg { max-width: 100%; height: auto; }
[lang="mermaid"] .node text { font-size: 1rem; }
table tr th { border-bottom: 0px; }
video { max-width: 100%; display: block; margin: 0px auto; }
iframe { max-width: 100%; width: 100%; border: none; }
.highlight td, .highlight tr { border: 0px; }
mark { background: rgb(255, 255, 0); color: rgb(0, 0, 0); }
.md-html-inline .md-plain, .md-html-inline strong, mark .md-inline-math, mark strong { color: inherit; }
mark .md-meta { color: rgb(0, 0, 0); opacity: 0.3 !important; }
@media print {
  .typora-export h1, .typora-export h2, .typora-export h3, .typora-export h4, .typora-export h5, .typora-export h6 { break-inside: avoid; }
}
.md-diagram-panel .messageText { stroke: none !important; }
.md-diagram-panel .start-state { fill: var(--node-fill); }
.md-diagram-panel .edgeLabel rect { opacity: 1 !important; }
.md-require-zoom-fix foreignobject { font-size: var(--mermaid-font-zoom); }


:root {
    --side-bar-bg-color: #fafafa;
    --control-text-color: #777;
}

@include-when-export url(https://fonts.loli.net/css?family=Open+Sans:400italic,700italic,700,400&subset=latin,latin-ext);

/* open-sans-regular - latin-ext_latin */
  /* open-sans-italic - latin-ext_latin */
    /* open-sans-700 - latin-ext_latin */
    /* open-sans-700italic - latin-ext_latin */
  html {
    font-size: 16px;
}

body {
    font-family: "Open Sans","Clear Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
    color: rgb(51, 51, 51);
    line-height: 1.6;
}

#write {
    max-width: 860px;
  	margin: 0 auto;
  	padding: 30px;
    padding-bottom: 100px;
}

@media only screen and (min-width: 1400px) {
	#write {
		max-width: 1024px;
	}
}

@media only screen and (min-width: 1800px) {
	#write {
		max-width: 1200px;
	}
}

#write > ul:first-child,
#write > ol:first-child{
    margin-top: 30px;
}

a {
    color: #4183C4;
}
h1,
h2,
h3,
h4,
h5,
h6 {
    position: relative;
    margin-top: 1rem;
    margin-bottom: 1rem;
    font-weight: bold;
    line-height: 1.4;
    cursor: text;
}
h1:hover a.anchor,
h2:hover a.anchor,
h3:hover a.anchor,
h4:hover a.anchor,
h5:hover a.anchor,
h6:hover a.anchor {
    text-decoration: none;
}
h1 tt,
h1 code {
    font-size: inherit;
}
h2 tt,
h2 code {
    font-size: inherit;
}
h3 tt,
h3 code {
    font-size: inherit;
}
h4 tt,
h4 code {
    font-size: inherit;
}
h5 tt,
h5 code {
    font-size: inherit;
}
h6 tt,
h6 code {
    font-size: inherit;
}
h1 {
    font-size: 2.25em;
    line-height: 1.2;
    border-bottom: 1px solid #eee;
}
h2 {
    font-size: 1.75em;
    line-height: 1.225;
    border-bottom: 1px solid #eee;
}

/*@media print {
    .typora-export h1,
    .typora-export h2 {
        border-bottom: none;
        padding-bottom: initial;
    }

    .typora-export h1::after,
    .typora-export h2::after {
        content: "";
        display: block;
        height: 100px;
        margin-top: -96px;
        border-top: 1px solid #eee;
    }
}*/

h3 {
    font-size: 1.5em;
    line-height: 1.43;
}
h4 {
    font-size: 1.25em;
}
h5 {
    font-size: 1em;
}
h6 {
   font-size: 1em;
    color: #777;
}
p,
blockquote,
ul,
ol,
dl,
table{
    margin: 0.8em 0;
}
li>ol,
li>ul {
    margin: 0 0;
}
hr {
    height: 2px;
    padding: 0;
    margin: 16px 0;
    background-color: #e7e7e7;
    border: 0 none;
    overflow: hidden;
    box-sizing: content-box;
}

li p.first {
    display: inline-block;
}
ul,
ol {
    padding-left: 30px;
}
ul:first-child,
ol:first-child {
    margin-top: 0;
}
ul:last-child,
ol:last-child {
    margin-bottom: 0;
}
blockquote {
    border-left: 4px solid #dfe2e5;
    padding: 0 15px;
    color: #777777;
}
blockquote blockquote {
    padding-right: 0;
}
table {
    padding: 0;
    word-break: initial;
}
table tr {
    border-top: 1px solid #dfe2e5;
    margin: 0;
    padding: 0;
}
table tr:nth-child(2n),
thead {
    background-color: #f8f8f8;
}
table th {
    font-weight: bold;
    border: 1px solid #dfe2e5;
    border-bottom: 0;
    margin: 0;
    padding: 6px 13px;
}
table td {
    border: 1px solid #dfe2e5;
    margin: 0;
    padding: 6px 13px;
}
table th:first-child,
table td:first-child {
    margin-top: 0;
}
table th:last-child,
table td:last-child {
    margin-bottom: 0;
}

.CodeMirror-lines {
    padding-left: 4px;
}

.code-tooltip {
    box-shadow: 0 1px 1px 0 rgba(0,28,36,.3);
    border-top: 1px solid #eef2f2;
}

.md-fences,
code,
tt {
    border: 1px solid #e7eaed;
    background-color: #f8f8f8;
    border-radius: 3px;
    padding: 0;
    padding: 2px 4px 0px 4px;
    font-size: 0.9em;
}

code {
    background-color: #f3f4f4;
    padding: 0 2px 0 2px;
}

.md-fences {
    margin-bottom: 15px;
    margin-top: 15px;
    padding-top: 8px;
    padding-bottom: 6px;
}


.md-task-list-item > input {
  margin-left: -1.3em;
}

@media print {
    html {
        font-size: 13px;
    }
    table,
    pre {
        page-break-inside: avoid;
    }
    pre {
        word-wrap: break-word;
    }
}

.md-fences {
	background-color: #f8f8f8;
}
#write pre.md-meta-block {
	padding: 1rem;
    font-size: 85%;
    line-height: 1.45;
    background-color: #f7f7f7;
    border: 0;
    border-radius: 3px;
    color: #777777;
    margin-top: 0 !important;
}

.mathjax-block>.code-tooltip {
	bottom: .375rem;
}

.md-mathjax-midline {
    background: #fafafa;
}

#write>h3.md-focus:before{
	left: -1.5625rem;
	top: .375rem;
}
#write>h4.md-focus:before{
	left: -1.5625rem;
	top: .285714286rem;
}
#write>h5.md-focus:before{
	left: -1.5625rem;
	top: .285714286rem;
}
#write>h6.md-focus:before{
	left: -1.5625rem;
	top: .285714286rem;
}
.md-image>.md-meta {
    /*border: 1px solid #ddd;*/
    border-radius: 3px;
    padding: 2px 0px 0px 4px;
    font-size: 0.9em;
    color: inherit;
}

.md-tag {
    color: #a7a7a7;
    opacity: 1;
}

.md-toc { 
    margin-top:20px;
    padding-bottom:20px;
}

.sidebar-tabs {
    border-bottom: none;
}

#typora-quick-open {
    border: 1px solid #ddd;
    background-color: #f8f8f8;
}

#typora-quick-open-item {
    background-color: #FAFAFA;
    border-color: #FEFEFE #e5e5e5 #e5e5e5 #eee;
    border-style: solid;
    border-width: 1px;
}

/** focus mode */
.on-focus-mode blockquote {
    border-left-color: rgba(85, 85, 85, 0.12);
}

header, .context-menu, .megamenu-content, footer{
    font-family: "Segoe UI", "Arial", sans-serif;
}

.file-node-content:hover .file-node-icon,
.file-node-content:hover .file-node-open-state{
    visibility: visible;
}

.mac-seamless-mode #typora-sidebar {
    background-color: #fafafa;
    background-color: var(--side-bar-bg-color);
}

.md-lang {
    color: #b4654d;
}

.html-for-mac .context-menu {
    --item-hover-bg-color: #E6F0FE;
}

#md-notification .btn {
    border: 0;
}

.dropdown-menu .divider {
    border-color: #e5e5e5;
}

.ty-preferences .window-content {
    background-color: #fafafa;
}

.ty-preferences .nav-group-item.active {
    color: white;
    background: #999;
}

 :root {--mermaid-font-zoom:1.4875em ;} 
</style>
</head>
<body class='typora-export os-windows'>
<div id='write'  class=''><h1><a name="cnn" class="md-header-anchor"></a><span>CNN</span></h1><p><span>我们开始探讨 Network 的架构设计,第一个Network 架构的变形是 Convolutional 的 Neural Network,它的缩写是 CNN,它是专门被用在影像上的,我希望透过 CNN 这个例子,来让大家知道Network 的架构,它的设计有什麼样的想法,那為什麼设计 Network 的架构,可以让我们的 Network 结果做得更好。</span></p><h2><a name="image-classification" class="md-header-anchor"></a><span>Image Classification</span></h2><p><span>接下来要讲的例子是跟影像有关的,我们要做影像的分类,也就是给机器一张图片,它要去决定说这张图片裡面有什麼样的东西,那怎麼做呢</span></p><p><span>我们已经跟大家讲过怎麼做分类这件事情,在以下的讨论裡面,我们都假设我们的模型</span><strong><span>输入的图片大小是固定的</span></strong><span>,举例来说 它固定输入的图片大小,都是 100 × 100 的解析度,就算是今天 Deep Learning 已经这麼的 Popular,我们往往都还是需要假设说,一个模型输入的影像大小都是一样的</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329144404567.png" alt="image-20210329144404567" style="zoom: 50%;" /></p><p><span>图片可能有大有小,而且不是所有图片都是正方形的啊,有长方形的怎麼办</span></p><p><span>今天常见的处理方式,丢进影像辨识系统处理方式就是,</span><strong><span>把所有图片都先 Rescale 成大小一样</span></strong><span>,再丢到影像的辨识系统裡面,</span></p><p><span>我们的模型的输出应该是什麼呢,我们模型的目标是分类,所以我们会把每一个类别,表示成一个 One-Hot 的 Vector,我的目标就叫做 </span><span class="MathJax_SVG" tabindex="-1" style="font-size: 100%; display: inline-block;"><svg xmlns:xlink="http://www.w3.org/1999/xlink" width="1.301ex" height="2.461ex" viewBox="0 -755.9 560.2 1059.4" role="img" focusable="false" style="vertical-align: -0.705ex;"><defs><path stroke-width="0" id="E28-MJMATHI-79" d="M21 287Q21 301 36 335T84 406T158 442Q199 442 224 419T250 355Q248 336 247 334Q247 331 231 288T198 191T182 105Q182 62 196 45T238 27Q261 27 281 38T312 61T339 94Q339 95 344 114T358 173T377 247Q415 397 419 404Q432 431 462 431Q475 431 483 424T494 412T496 403Q496 390 447 193T391 -23Q363 -106 294 -155T156 -205Q111 -205 77 -183T43 -117Q43 -95 50 -80T69 -58T89 -48T106 -45Q150 -45 150 -87Q150 -107 138 -122T115 -142T102 -147L99 -148Q101 -153 118 -160T152 -167H160Q177 -167 186 -165Q219 -156 247 -127T290 -65T313 -9T321 21L315 17Q309 13 296 6T270 -6Q250 -11 231 -11Q185 -11 150 11T104 82Q103 89 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Z"></path><path stroke-width="0" id="E28-MJMAIN-5E" d="M112 560L249 694L257 686Q387 562 387 560L361 531Q359 532 303 581L250 627L195 580Q182 569 169 557T148 538L140 532Q138 530 125 546L112 560Z"></path></defs><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="matrix(1 0 0 -1 0 0)"><use xlink:href="#E28-MJMATHI-79" x="1" y="0"></use><use xlink:href="#E28-MJMAIN-5E" x="60" y="-13"></use></g></svg></span><script type="math/tex">\hat{y}</script></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329144924030.png" alt="image-20210329144924030" style="zoom: 50%;" /></p><p><span>在这个 One-Hot 的 Vector 裡面,假设我们现在</span><strong><span>类别是一个猫的话,那猫所对应的 Dimension,它的数值就是 1,其他的东西所对的 Dimension 的数值就是 0</span></strong></p><p><span>那</span><strong><span>这个 Dimension 的长度就决定了,你现在的模型可以辨识出多少不同种类的东西</span></strong><span>,如果你向量的长度是 2000,就代表说你这个模型,可以辨识出 2000 种不同的东西,那今天比较强的影像辨识系统,往往可以辨识出 1000 种以上的东西,甚至到上万种不同的 Object,那如果你今天希望你的影像辨识系统,它可以辨识上万种 Object,那你的 Label 就会是一个上万维,维度是上万的 One-Hot Vector</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329145326452.png" alt="image-20210329145326452" style="zoom: 50%;" /></p><p><span>我的模型的输出通过 Softmax 以后,输出是 </span><span class="MathJax_SVG" tabindex="-1" style="font-size: 100%; display: inline-block;"><svg xmlns:xlink="http://www.w3.org/1999/xlink" width="1.843ex" height="2.694ex" viewBox="0 -856.4 793.6 1160" role="img" focusable="false" style="vertical-align: -0.705ex;"><defs><path stroke-width="0" id="E30-MJMATHI-79" d="M21 287Q21 301 36 335T84 406T158 442Q199 442 224 419T250 355Q248 336 247 334Q247 331 231 288T198 191T182 105Q182 62 196 45T238 27Q261 27 281 38T312 61T339 94Q339 95 344 114T358 173T377 247Q415 397 419 404Q432 431 462 431Q475 431 483 424T494 412T496 403Q496 390 447 193T391 -23Q363 -106 294 -155T156 -205Q111 -205 77 -183T43 -117Q43 -95 50 -80T69 -58T89 -48T106 -45Q150 -45 150 -87Q150 -107 138 -122T115 -142T102 -147L99 -148Q101 -153 118 -160T152 -167H160Q177 -167 186 -165Q219 -156 247 -127T290 -65T313 -9T321 21L315 17Q309 13 296 6T270 -6Q250 -11 231 -11Q185 -11 150 11T104 82Q103 89 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Z"></path><path stroke-width="0" id="E30-MJMAIN-2032" d="M79 43Q73 43 52 49T30 61Q30 68 85 293T146 528Q161 560 198 560Q218 560 240 545T262 501Q262 496 260 486Q259 479 173 263T84 45T79 43Z"></path></defs><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="matrix(1 0 0 -1 0 0)"><use xlink:href="#E30-MJMATHI-79" x="0" y="0"></use><use transform="scale(0.707)" xlink:href="#E30-MJMAIN-2032" x="705" y="513"></use></g></svg></span><script type="math/tex">y'</script><span>,然后我们希望 </span><span class="MathJax_SVG" tabindex="-1" style="font-size: 100%; display: inline-block;"><svg xmlns:xlink="http://www.w3.org/1999/xlink" width="1.843ex" height="2.694ex" viewBox="0 -856.4 793.6 1160" role="img" focusable="false" style="vertical-align: -0.705ex;"><defs><path stroke-width="0" id="E30-MJMATHI-79" d="M21 287Q21 301 36 335T84 406T158 442Q199 442 224 419T250 355Q248 336 247 334Q247 331 231 288T198 191T182 105Q182 62 196 45T238 27Q261 27 281 38T312 61T339 94Q339 95 344 114T358 173T377 247Q415 397 419 404Q432 431 462 431Q475 431 483 424T494 412T496 403Q496 390 447 193T391 -23Q363 -106 294 -155T156 -205Q111 -205 77 -183T43 -117Q43 -95 50 -80T69 -58T89 -48T106 -45Q150 -45 150 -87Q150 -107 138 -122T115 -142T102 -147L99 -148Q101 -153 118 -160T152 -167H160Q177 -167 186 -165Q219 -156 247 -127T290 -65T313 -9T321 21L315 17Q309 13 296 6T270 -6Q250 -11 231 -11Q185 -11 150 11T104 82Q103 89 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Z"></path><path stroke-width="0" id="E30-MJMAIN-2032" d="M79 43Q73 43 52 49T30 61Q30 68 85 293T146 528Q161 560 198 560Q218 560 240 545T262 501Q262 496 260 486Q259 479 173 263T84 45T79 43Z"></path></defs><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="matrix(1 0 0 -1 0 0)"><use xlink:href="#E30-MJMATHI-79" x="0" y="0"></use><use transform="scale(0.707)" xlink:href="#E30-MJMAIN-2032" x="705" y="513"></use></g></svg></span><script type="math/tex">y'</script><span> 和</span><span class="MathJax_SVG" tabindex="-1" style="font-size: 100%; display: inline-block;"><svg xmlns:xlink="http://www.w3.org/1999/xlink" width="1.301ex" height="2.461ex" viewBox="0 -755.9 560.2 1059.4" role="img" focusable="false" style="vertical-align: -0.705ex;"><defs><path stroke-width="0" id="E28-MJMATHI-79" d="M21 287Q21 301 36 335T84 406T158 442Q199 442 224 419T250 355Q248 336 247 334Q247 331 231 288T198 191T182 105Q182 62 196 45T238 27Q261 27 281 38T312 61T339 94Q339 95 344 114T358 173T377 247Q415 397 419 404Q432 431 462 431Q475 431 483 424T494 412T496 403Q496 390 447 193T391 -23Q363 -106 294 -155T156 -205Q111 -205 77 -183T43 -117Q43 -95 50 -80T69 -58T89 -48T106 -45Q150 -45 150 -87Q150 -107 138 -122T115 -142T102 -147L99 -148Q101 -153 118 -160T152 -167H160Q177 -167 186 -165Q219 -156 247 -127T290 -65T313 -9T321 21L315 17Q309 13 296 6T270 -6Q250 -11 231 -11Q185 -11 150 11T104 82Q103 89 103 113Q103 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Z"></path><path stroke-width="0" id="E28-MJMAIN-5E" d="M112 560L249 694L257 686Q387 562 387 560L361 531Q359 532 303 581L250 627L195 580Q182 569 169 557T148 538L140 532Q138 530 125 546L112 560Z"></path></defs><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="matrix(1 0 0 -1 0 0)"><use xlink:href="#E28-MJMATHI-79" x="1" y="0"></use><use xlink:href="#E28-MJMAIN-5E" x="60" y="-13"></use></g></svg></span><script type="math/tex">\hat{y}</script><span>的 Cross Entropy 越小越好,接下来的问题是怎麼</span><strong><span>把一张影像当做一个模型的输入</span></strong></p><p><span>其实对於一个 Machine 来说,</span><strong><span>一张图片其实是一个三维的 Tensor</span></strong></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329150221441.png" alt="image-20210329150221441" style="zoom:67%;" /></p><p><span>如果不知道 Tensor 是什麼的话,你就想成它是</span><strong><span>维度大於 2 的矩阵就是 Tensor</span></strong><span>,矩阵是二维,那二维以上的 超过二维的矩阵,你就叫它 Tensor</span></p><p><span>一张图片它是一个三维的 Tensor,其中一维代表图片的</span><strong><span>宽</span></strong><span>,另外一维代表图片的</span><strong><span>高</span></strong><span>,还有一维代表图片的 </span><strong><span>Channel 的数目</span></strong></p><p><span>一张彩色的图片,今天它每一个 Pixel,都是由 R G B 三个顏色所组成的,所以这三个 Channel 就代表了 R G B 三个顏色,那长跟宽就代表了今天这张图片的解析度,代表这张图片裡面有的 Pixel,有的像素的数目</span></p><p><span>那接下来我们就要</span><strong><span>把这一个三维的 Tensor拉直,就可以丢到一个 Network 裡面去了</span></strong></p><p><span>到目前為止我们所讲的 Network,它的输入其实都是一个向量,所以我们只要能够把一张图片变成一个向量,我们就可以把它当做是 Network 的输入,但是怎麼把这个三维的 Tensor 变成一个向量呢,那最直觉的方法就是直接拉直它</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329150453073.png" alt="image-20210329150453073" style="zoom:50%;" /></p><p><span>一个三维的 Tensor 裡面有几个数字呢</span></p><p><span>在这个例子裡面有 100 × 100×3 个数字,把这些数字通通拿出来排成一排,就是一个巨大的向量,这个向量可以作為 Network 的输入</span></p><p><span>而这个向量裡面,</span><strong><span>每一维它裡面存的数值,其实就是某一个 Pixel某一个顏色的强度</span></strong><span>,每一个 Pixel 有 R G B 三个顏色所组成</span></p><p>&nbsp;</p><p><span>这个向量啊,我们可以把它当做是一个 Network 的输入,那我们到目前為止,只讲过了 Fully Connected Network,好 如果我们把向量当做 Network 的输入,我们 Input 这边 Feature Vector,它的长度就是 100 × 100×3</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329151609783.png" alt="image-20210329151609783" style="zoom:50%;" /></p><p><span>非常长的一个 Vector,那假设我们现在的,第一层的 Neuron 的数目有 1000 个,那你能计算一下这边第一层,总共有多少个 Weight 吗</span></p><p><span>我们每一个 Neuron,它跟输入的向量的每一个数值,都会有一个 Weight,所以如果输入的向量长度是 100 × 100×3,有 1000 个 Neuron,那我们现在第一层的 Weight,就有 1000×100 × 100×3,也就是 3×10 的 7 次方</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329151709793.png" alt="image-20210329151709793" style="zoom:50%;" /></p><p><span>是一个非常巨大的数目,那如果参数越多会有什麼样的问题呢</span></p><p><span>虽然随著参数的增加,我们可以增加模型的弹性,我们可以增加它的能力,但是我们也</span><strong><span>增加了 Overfitting 的风险</span></strong><span>,有关什麼叫模型的弹性,到底 Overfitting 怎麼產生的,下週吴培元老师</span><a href='https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/W14_PAC-introduction.pdf' target='_blank' class='url'>https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/W14_PAC-introduction.pdf</a><span>会从数学上,给大家非常清楚的证明,那我们这边就讲概念上,如果模型的弹性越大,就越容易 Overfitting</span></p><p><span>那我们怎麼减少在做影像辨识的时候,怎麼避免使用这麼多的参数呢</span></p><p><span>那考虑到影像辨识这个问题本身的特性,其实</span><strong><span>我们并不一定需要 Fully Connected</span></strong><span> 这件事,我们其实不需要每一个 Neuron,跟 Input的每一个 Dimension 都有一个 Weight</span></p><p><span>怎麼说呢,接下来就是对影像辨识这个问题,对影像本身的特性的一些观察</span></p><h2><a name="observation-1" class="md-header-anchor"></a><span>Observation 1</span></h2><p><span>第一个观察是,对影像辨识这个问题而言,假设我们想要知道这张图片裡面有一隻动物,这个动物是一个鸟 要怎麼做呢</span></p><p><span>也许对一个影像辨识的系统而言,对一个影像辨识的 Neuron,对一个影像辨识的类神经网路裡面的神经而言,它要做的就是侦测说现在这张图片裡面,有没有出现一些特别重要的 Pattern</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329152250346.png" alt="image-20210329152250346" style="zoom: 50%;" /></p><p><span>举例来说 如果现在</span></p><ul><li><span>有某一个 Neuron ,它看到鸟嘴这个 Pattern</span></li><li><span>有某个 Neuron 又说,它看到眼睛这个 Pattern</span></li><li><span>又有某个 Neuron 说,它看到鸟爪这个 Pattern</span></li></ul><p><span>也许看到这些 Pattern 综合起来就代表说,我们看到了一隻鸟,类神经网路就可以告诉你说,因為看到了这些 Pattern,所以它看到了一隻鸟</span></p><p><span>那也许你会觉得说,看 Pattern 然后决定它是什麼,这件事情好像没有很聪明,但你仔细想想,</span><strong><span>人是不是也是用同样的方法,来看一张图片中有没有一隻鸟呢,</span></strong></p><p><span>举例来说这一个例子,不知道你有没有看到,这裡面有什麼样的动物?</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329152538714.png" alt="image-20210329152538714" style="zoom:50%;" /></p><p><span>你看这边</span><strong><span>有一个鸟嘴</span></strong><span>,这边有一个眼睛,看起来牠是一个乌鸦</span></p><p><span>但是牠其实是一隻猫</span></p><p><span>如果你看到牠是一隻鸟的话,那你就应该放下酒杯了,因為这是一隻猫</span></p><p><span>所以其实就算是人,我们在判断一个物件的时候,往往也是抓最重要的特徵,然后看到这些特徵以后,你很直觉的就会觉得说,你看到了某种物件,对机器来说,也许这也是一个有效的,判断影像中有什麼物件的方法</span></p><p>&nbsp;</p><p><span>但是假设我们现在用 Neuron 做的事情,其实就是判断说现在有没有某种 Pattern 出现,那也许</span><strong><span>我们并不需要每一个 Neuron都去看一张完整的图片</span></strong></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329153053000.png" alt="image-20210329153053000" style="zoom:50%;" /></p><p><span>因為这一些重要的 Pattern,比如说鸟嘴 比如说眼睛 比如说鸟爪,并不需要看整张完整的图片,才能够得到这些资讯,</span></p><p><strong><span>所以这些 Neuron 也许根本就不需要,把整张图片当作输入,它们只需要把图片的一小部分当作输入,就足以让它们侦测某些特别关键的 Pattern有没有出现了</span></strong></p><p><span>这是第一个观察,根据这个观察,我们就可以做第一个简化 怎麼简化呢</span></p><h2><a name="simplification-1" class="md-header-anchor"></a><span>Simplification 1 </span></h2><p><span>在 CNN 裡面有一个这样的做法,我们会设定一个区域叫做 </span><mark><span>Receptive Field</span></mark><span>,</span><strong><span>每一个 Neuron 都只关心自己的 Receptive Field 裡面发生的事情就好了</span></strong></p><p><span>举例来说 你会先定义说这个</span><strong><span>蓝色的 Neuron</span></strong><span>,它的守备范围就是这一个 Receptive Field,那这个 Receptive Field 裡面有 3×3×3 个数值,那对蓝色的 Neuron 来说,它只需要关心这一个小范围就好了,不需要在意整张图片裡面有什麼东西</span></p><p><span>那这个 Neuron,怎麼考虑这个 Receptive Field 裡,有没有发生什麼样的事情呢</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329154413724.png" alt="image-20210329154413724" style="zoom:50%;" /></p><p><span>它要做的事情就是</span></p><ul><li><span>把这 3×3×3 的数值</span><strong><span>拉直</span></strong><span>,变成一个长度是 3×3×3 也就是 27 维的向量,再把这 27 维的向量作為这个 Neuron 的输入</span></li><li><span>这个 Neuron 会给 27 维的向量的,</span><strong><span>每一个 Dimension 一个 Weight,</span></strong><span>所以这个 Neuron 有 3×3×3  27个 Weight,</span></li><li><span>再</span><strong><span>加上 Bias</span></strong><span> 得到的输出,这个输出再送给下一层的 Neuron 当作输入,</span></li></ul><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329154527924.png" alt="image-20210329154527924" style="zoom:50%;" /></p><p>&nbsp;</p><p><span>所以每一个 Neuron,它只考虑自己的 Receptive Field,那这个 Receptive Field 要怎麼决定出来呢,那</span><strong><span>这个就要问你自己了</span></strong></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329154750439.png" alt="image-20210329154750439" style="zoom:50%;" /></p><ul><li><span>你可以说这边有个蓝色的 Neuron,它就看左上角这个范围,这是它的 Receptive Field</span></li><li><span>另外又有另外一个黄色的 Neuron,它是看右下角这个 3×3×3 的范围</span></li><li><span>那 Receptive Field 彼此之间也</span><strong><span>可以是重叠的</span></strong><span>,比如说我现在画一个 Receptive Field,那这个地方它是绿色的 Neuron 的守备范围,它跟蓝色的跟黄色的都有一些重叠的空间</span></li><li><span>那你甚至可以</span><strong><span>两个不同的 Neuron,它们守备看到的范围是一样的</span></strong><span>,也许一个范围使用一个 Neuron 来守备,你没有办法侦测所有的 Pattern,所以同个范围可以有多个不同的 Neuron,所以同个 Receptive Field,它们可以有多个</span></li></ul><p><span>那接下来你就会浮想联翩有各式各样的想法,举例来说,</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329155519341.png" alt="image-20210329155519341" style="zoom:50%;" /></p><ul><li><span>那我可不可以 </span><strong><span>Receptive Field 有大有小</span></strong><span>呢?因為毕竟 Pattern 有的比较小 有的比较大,有的 Pattern 也许在 3×3 的范围内,就可以被侦测出来,有的 Pattern 也许要 11×11 的范围,才能被侦测出来,可以,这个算是常见的招式了</span></li><li><span>我可不可以 Receptive Field,</span><strong><span>只考虑某些 Channel</span></strong><span> 呢,我们这边看起来我们的 Receptive Field,是 R G B 三个 Channel 都考虑,但也许有些 Pattern,只在红色的 Channel 会出现,也许有些 Pattern,只在蓝色的 Channel 会出现啊,我可不可以有的 Neuron 只考虑一个 Channel 呢？可以,其实之后在讲到 Network Compression的时候,会讲到这种 Network 的架构,在一般 CNN 裡面你不常这样子的考虑,但是有这样子的做法</span></li><li><span>那有人会问说这边的 Receptive Field,通通都是正方形的,你刚才举的例子裡面,3×3  11×11 也都是正方形的,可不可以是长方形？可以！</span><strong><span>可以是长方形的</span></strong><span>,这完全都是你自己设计的,Receptive Field 是你自己定义的,你完全可以根据你对这个问题的理解,决定你觉得 Receptive Field 应该要长什麼样子</span></li><li><span>你可能会说 Receptive Field </span><strong><span>一定要相连吗</span></strong><span>？我们可不可以说有一个 Neuron,它的 Receptive Field 就是影像的左上角,跟右上角。</span><strong><span>理论上可以</span></strong><span>,但是你就要想看為什麼你要这麼做嘛,会不会有什麼 Pattern 是会,也要看一个图片的左上角,跟右下角才能够找到的,也许没有 如果没有的话,这种 Receptive Field 就没什麼用,我们之所以 Receptive Field 都是,一个相连的领地,就是我们觉得要侦测一个 Pattern,那这个 Pattern,它就出现在整个图片裡面的某一个位置,而不是出现,而不是分成好几部分,出现在图片裡面的不同的位置,所以 Receptive Field 呢 它都是相,通常见到的都是相连的领地</span></li></ul><p><strong><span>如果你说你要设计很奇怪的 Receptive Field,去解决很特别的问题,那完全是可以的,这都是你自己决定的</span></strong></p><h3><a name="simplification-1----typical-setting" class="md-header-anchor"></a><span>Simplification 1 – Typical Setting  </span></h3><p><span>虽然 Receptive Field 你可以任意设计,但也有</span><strong><span>最经典的 Receptive Field 的安排方式</span></strong></p><ol><li><strong><span>看所有的 Channel</span></strong></li></ol><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329162543905.png" alt="image-20210329162543905" style="zoom:50%;" /></p><p><span>一般在做影像辨识的时候我们可能,你可能不会觉得有些 Pattern 只出现某一个 Channel 裡面,所以会看全部的 Channel,所以既然会看全部的 Channel</span></p><p><span>我们在描述一个 Receptive Field 的时候,</span><strong><span>只要讲它的高跟宽就好</span></strong><span>了,就不用讲它的深度,反正</span><strong><span>深度一定是考虑全部的 Channel</span></strong><span>,而这个高跟宽合起来叫做 </span><mark><span>Kernel Size</span></mark></p><p><span>举例来说在这个例子裡面,我们的 Kernel Size 就是 3×3,那一般我们 Kernel Size 其实不会设太大,你在影像辨识裡面,往往做个 3×3 的 Kernel Size 就足够了,如果你说你设个 7×7  9×9,那这算是蛮大的 Kernel Size,一般往往都做 3×3</span></p><p><span>可能会有人疑问那如果 Kernel Size 都是 3×3,意味著说我们觉得在做影像辨识的时候,重要的 Pattern 都只在 3×3 这麼小的范围内,就可以被侦测出来了,听起来好像怪怪的,有些 Pattern 也许很大啊,也许 3×3 的范围没办法侦测出来啊</span></p><p><span>等一下我们会再回答这个问题,那我现在先告诉你说,常见的 Receptive Field 设定方式,就是 Kernel Size 3×3,然后</span><strong><span>一般同一个 Receptive Field,不会只有一个 Neuron 去关照它,往往会有一组 一排 Neuron 去守备它</span></strong><span>,比如说 64 个 或者是 128 个 Neuron 去守备一个 Receptive Field 的范围,</span></p><ol start='2' ><li><span>到目前為止我们讲的都是一个 Receptive Field,那各个不同 Receptive Field 之间的关係,是怎麼样呢,你会把你在最左上角的这个 Receptive Field,往右移一点,然后製造一个另外一个 Receptive Field,这个移动的量叫做 </span><mark><span>Stride</span></mark></li></ol><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329163013588.png" alt="image-20210329163013588" style="zoom: 50%;" /></p><p><span>像在这个例子裡面 Stride 就等於 2,那 </span><strong><span>Stride 是一个你自己决定的 Hyperparameter</span></strong><span>,但这个 Stride 你往往不会设太大,往往设 1 或 2 就可以了</span></p><p><span>因為你希望这些 Receptive Field,跟 Receptive Field 之间是有重叠的,因為假设 Receptive Field 完全没有重叠,那有一个 Pattern 就正好出现,在两个 Receptive Field 的交界上面,那就会变成没有任何 Neuron 去侦测它,那你也可能就会 Miss 掉这个 Pattern,所以我们希望 Receptive Field 彼此之间,有高度的重叠</span></p><p><span>那假设我们设 Stride = 2,那第一个 Receptive Field 就在这边,那第二个就会在这边</span></p><ol start='3' ><li><span>再往右移两格就放在这边,那这边就遇到一个问题了,它</span><strong><span>超出了影像的范围</span></strong><span>怎麼办呢</span></li></ol><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329163307529.png" alt="image-20210329163307529" style="zoom:50%;" /></p><p><span>那有人可能会说,那就不要在这边摆 Receptive Field,但你这样就漏掉了影像的边边的地方啊,如果有个 Pattern 就在边边的地方,你就没有 Neuron 去关照那些 Pattern啦,没有 Neuron 去侦测出现在边边的 Pattern 了,所以一般边边的地方也会考虑的,但超出范围了怎麼办呢</span></p><p><span>超出范围你就做 </span><mark><strong><span>Padding</span></strong></mark><span>,</span><strong><span>Padding 就是补 0</span></strong><span>,好 所以如果你今天 Receptive Field 有一部分,超出影像的范围之外了,那就当做那个裡面的值都是 0</span></p><p><span>其实也有</span><strong><span>别的补值的方法,Padding 就是补值的意思</span></strong><span>,比如说有人会说,我这边不要补 0 好不好,我补整张图片裡面所有 Value 的平均,或者你说,我把边边的这些数字拿出来补，有各种不同的 Padding 的方法</span></p><ol start='4' ><li><span>那你</span><strong><span>除了这个横著移动,你也会这个直著移动</span></strong><span>,你有会有这个垂直方向上的移动,</span></li></ol><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329164727908.png" alt="image-20210329164727908" style="zoom:50%;" /></p><p><span>在这边呢 我们一样垂直方向 Stride 也是设 2,所以你有一个 Receptive Field 在这边,垂直方向移动两格,就有一个 Receptive Field 在这个地方,你就按照这个方式,扫过整张图片,所以整张图片裡面,每一吋土地都是有被某一个,Receptive Field 覆盖的,也就是图片裡面每一个位置,都有一群 Neuron 在侦测那个地方,有没有出现某些 Pattern</span></p><p><span>好 那这个是第一个简化,Fully Connected Network 的方式,好 </span></p><h2><a name="observation-2" class="md-header-anchor"></a><span>Observation 2</span></h2><p><span>第二个观察就是,</span><strong><span>同样的 Pattern,它可能会出现在图片的不同区域裡面</span></strong><span>,</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329182421998.png" alt="image-20210329182421998" style="zoom:50%;" /></p><p><span>比如说鸟嘴这个 Pattern,它可能出现在图片的左上角,也可能出现在图片的中间,虽然它们的形状都是一样的 都是鸟嘴,但是它们可能出现在,图片裡面的不同的位置</span></p><p><span>按照我们刚才的讨论,你同样的 Pattern,出现在图片的不同的位置,似乎也不是太大的问题,因為出现在左上角的鸟嘴,它一定落在某一个 Receptive Field 裡面,因為 Receptive Field 是移动完之后会覆盖满整个图片的,所以图片裡面没有任何地方不是在某个 Neuron 的守备范围内</span></p><p><span>那假设在那个 Receptive Field 裡面,有一个 Neuron 它的工作,就是侦测鸟嘴的话,那鸟嘴就会被侦测出来</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329182937549.png" alt="image-20210329182937549" style="zoom:50%;" /></p><p><span>所以就算鸟嘴出现在中间,也没有关係,假设有 这边一定是在某一个,Receptive Field 的范围裡面,那个 Receptive Field,一定有一组 Neuron 在照顾,那假设其中有一个 Neuron,它可以侦测鸟嘴的话,那鸟嘴出现在图片的中间,也会被侦测出来</span></p><p><span>但这边的问题是,这些侦测鸟嘴的 Neuron,它们做的事情其实是一样的,只是它们守备的范围是不一样,</span><strong><span>我们真的需要每一个守备范围,都去放一个侦测鸟嘴的 Neuron 吗？</span></strong></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329183008609.png" alt="image-20210329183008609" style="zoom:50%;" /></p><p><span>如果不同的守备范围,都要有一个侦测鸟嘴的 Neuron,那你的参数量不会太多了吗？</span></p><p><span>而这个概念就好像為什麼教务处希望,可以推大型的课程一样,假设说每一个科系,其实都需要程式相关的课程,或每一个科系都需要机器学习相关的课程,那到底需不需要在每一个系所都开机器学习的课程,还是说开一个比较大班的课程,让所有系所的人都可以修课。</span></p><h2><a name="simplification-2" class="md-header-anchor"></a><span>Simplification 2</span></h2><p><span>如果放在影像处理上的话,我们能不能够让,不同 Receptive Field 的 Neuron共享参数,也就是做 </span><mark><span>Parameter Sharing权值共享</span></mark><span>,那共享参数是什麼意思呢</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329183451096.png" alt="image-20210329183451096" style="zoom:50%;" /></p><p><span>所谓共享参数就是,这</span><strong><span>两个 Neuron 它们的 weights完全是一样的</span></strong><span>,我这边特别用顏色来告诉你说,它们的 weights 完全是一样的</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329185317890.png" alt="image-20210329185317890" style="zoom:50%;" /></p><ul><li><span>上面这个 Neuron 的第一个 weight,叫做 w1,下面这个 Neuron 的第一个 weight 也是 w1,它们是同一个 weight,我用</span><strong><span>红色</span></strong><span>来表示</span></li></ul><ul><li><span>上面这个 Neuron 的第二个 weight 是 w2,下面这个 Neuron 的第二个 weight 也是w2,它们都用</span><strong><span>黄色</span></strong><span>来表示,以此类推</span></li></ul><p><span>上面这个 Neuron 跟下面这个 Neuron,</span><strong><span>它们守备的 Receptive Field 是不一样的,但是它们的参数是一模一样的</span></strong></p><p><span>那有人可能就会问说,欸 它的参数是一模一样,那它会不会输出永远都是一样？</span></p><p><span>不会,因為它们的</span><strong><span>输入是不一样</span></strong><span>的,这两个 Neuron 的参数一模一样,但是它们</span><strong><span>照顾的范围是不一样</span></strong><span>的</span></p><ul><li><span>上面这个 Neuron,我们说它的输入是 </span><span class="MathJax_SVG" tabindex="-1" style="font-size: 100%; display: inline-block;"><svg xmlns:xlink="http://www.w3.org/1999/xlink" width="5.797ex" height="1.76ex" viewBox="0 -504.6 2495.8 757.9" role="img" focusable="false" style="vertical-align: -0.588ex;"><defs><path stroke-width="0" id="E43-MJMATHI-78" d="M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z"></path><path stroke-width="0" id="E43-MJMAIN-31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path stroke-width="0" id="E43-MJMAIN-2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z"></path><path stroke-width="0" id="E43-MJMAIN-32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path></defs><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="matrix(1 0 0 -1 0 0)"><use xlink:href="#E43-MJMATHI-78" x="0" y="0"></use><use transform="scale(0.707)" xlink:href="#E43-MJMAIN-31" x="808" y="-213"></use><use xlink:href="#E43-MJMAIN-2C" x="1025" y="0"></use><g transform="translate(1470,0)"><use xlink:href="#E43-MJMATHI-78" x="0" y="0"></use><use transform="scale(0.707)" xlink:href="#E43-MJMAIN-32" x="808" y="-213"></use></g></g></svg></span><script type="math/tex">x_1, x_2</script><span>,下面这个 Neuron它的输入是</span><span class="MathJax_SVG" tabindex="-1" style="font-size: 100%; display: inline-block;"><svg xmlns:xlink="http://www.w3.org/1999/xlink" width="5.797ex" height="2.811ex" viewBox="0 -806.1 2495.8 1210.2" role="img" focusable="false" style="vertical-align: -0.938ex;"><defs><path stroke-width="0" id="E58-MJMATHI-78" d="M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z"></path><path stroke-width="0" id="E58-MJMAIN-2032" d="M79 43Q73 43 52 49T30 61Q30 68 85 293T146 528Q161 560 198 560Q218 560 240 545T262 501Q262 496 260 486Q259 479 173 263T84 45T79 43Z"></path><path stroke-width="0" id="E58-MJMAIN-31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path stroke-width="0" id="E58-MJMAIN-2C" d="M78 35T78 60T94 103T137 121Q165 121 187 96T210 8Q210 -27 201 -60T180 -117T154 -158T130 -185T117 -194Q113 -194 104 -185T95 -172Q95 -168 106 -156T131 -126T157 -76T173 -3V9L172 8Q170 7 167 6T161 3T152 1T140 0Q113 0 96 17Z"></path><path stroke-width="0" id="E58-MJMAIN-32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path></defs><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="matrix(1 0 0 -1 0 0)"><use xlink:href="#E58-MJMATHI-78" x="0" y="0"></use><use transform="scale(0.707)" xlink:href="#E58-MJMAIN-2032" x="808" y="444"></use><use transform="scale(0.707)" xlink:href="#E58-MJMAIN-31" x="808" y="-434"></use><use xlink:href="#E58-MJMAIN-2C" x="1025" y="0"></use><g transform="translate(1470,0)"><use xlink:href="#E58-MJMATHI-78" x="0" y="0"></use><use transform="scale(0.707)" xlink:href="#E58-MJMAIN-2032" x="808" y="444"></use><use transform="scale(0.707)" xlink:href="#E58-MJMAIN-32" x="808" y="-434"></use></g></g></svg></span><script type="math/tex">x_1' , x_2'</script><span>,</span></li></ul><ul><li><p><span>上面这个 Neuron 的输出就是,x1 × w1 + x2 × w2,全部加加加 再加 Bias,然后透过 Activation Function 得到输出</span></p><div contenteditable="false" spellcheck="false" class="mathjax-block md-end-block md-math-block md-rawblock" id="mathjax-n504" cid="n504" mdtype="math_block"><div class="md-rawblock-container md-math-container" tabindex="-1"><div class="MathJax_SVG_Display" style="text-align: center;"><span class="MathJax_SVG" id="MathJax-Element-80-Frame" tabindex="-1" style="font-size: 100%; display: inline-block;"><svg xmlns:xlink="http://www.w3.org/1999/xlink" width="24.842ex" height="2.577ex" viewBox="0 -806.1 10695.8 1109.7" role="img" focusable="false" style="vertical-align: -0.705ex; max-width: 100%;"><defs><path stroke-width="0" id="E139-MJMATHI-3C3" d="M184 -11Q116 -11 74 34T31 147Q31 247 104 333T274 430Q275 431 414 431H552Q553 430 555 429T559 427T562 425T565 422T567 420T569 416T570 412T571 407T572 401Q572 357 507 357Q500 357 490 357T476 358H416L421 348Q439 310 439 263Q439 153 359 71T184 -11ZM361 278Q361 358 276 358Q152 358 115 184Q114 180 114 178Q106 141 106 117Q106 67 131 47T188 26Q242 26 287 73Q316 103 334 153T356 233T361 278Z"></path><path stroke-width="0" id="E139-MJMAIN-28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path><path stroke-width="0" id="E139-MJMATHI-77" d="M580 385Q580 406 599 424T641 443Q659 443 674 425T690 368Q690 339 671 253Q656 197 644 161T609 80T554 12T482 -11Q438 -11 404 5T355 48Q354 47 352 44Q311 -11 252 -11Q226 -11 202 -5T155 14T118 53T104 116Q104 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Q21 293 29 315T52 366T96 418T161 441Q204 441 227 416T250 358Q250 340 217 250T184 111Q184 65 205 46T258 26Q301 26 334 87L339 96V119Q339 122 339 128T340 136T341 143T342 152T345 165T348 182T354 206T362 238T373 281Q402 395 406 404Q419 431 449 431Q468 431 475 421T483 402Q483 389 454 274T422 142Q420 131 420 107V100Q420 85 423 71T442 42T487 26Q558 26 600 148Q609 171 620 213T632 273Q632 306 619 325T593 357T580 385Z"></path><path stroke-width="0" id="E139-MJMAIN-31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path stroke-width="0" id="E139-MJMATHI-78" d="M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z"></path><path stroke-width="0" id="E139-MJMAIN-2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z"></path><path stroke-width="0" id="E139-MJMAIN-32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path><path stroke-width="0" id="E139-MJMAIN-2026" d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60ZM525 60Q525 84 542 102T585 120Q609 120 627 104T646 61Q646 36 629 18T586 0T543 17T525 60ZM972 60Q972 84 989 102T1032 120Q1056 120 1074 104T1093 61Q1093 36 1076 18T1033 0T990 17T972 60Z"></path><path stroke-width="0" id="E139-MJMAIN-29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></defs><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="matrix(1 0 0 -1 0 0)"><use xlink:href="#E139-MJMATHI-3C3" x="0" y="0"></use><use xlink:href="#E139-MJMAIN-28" x="572" y="0"></use><g transform="translate(961,0)"><use xlink:href="#E139-MJMATHI-77" x="0" y="0"></use><use transform="scale(0.707)" xlink:href="#E139-MJMAIN-31" x="1012" y="-213"></use></g><g transform="translate(2130,0)"><use xlink:href="#E139-MJMATHI-78" x="0" y="0"></use><use transform="scale(0.707)" xlink:href="#E139-MJMAIN-31" x="808" y="-213"></use></g><use xlink:href="#E139-MJMAIN-2B" x="3378" y="0"></use><g transform="translate(4378,0)"><use xlink:href="#E139-MJMATHI-77" x="0" y="0"></use><use transform="scale(0.707)" xlink:href="#E139-MJMAIN-32" x="1012" y="-213"></use></g><g transform="translate(5548,0)"><use xlink:href="#E139-MJMATHI-78" x="0" y="0"></use><use transform="scale(0.707)" xlink:href="#E139-MJMAIN-32" x="808" y="-213"></use></g><use xlink:href="#E139-MJMAIN-2B" x="6795" y="0"></use><use xlink:href="#E139-MJMAIN-2026" x="7796" y="0"></use><use xlink:href="#E139-MJMAIN-2026" x="9134" y="0"></use><use xlink:href="#E139-MJMAIN-29" x="10306" y="0"></use></g></svg></span></div><script type="math/tex; mode=display" id="MathJax-Element-80">\sigma(w_1x_1+w_2x_2+……)</script></div></div></li><li><p><span>下面这个 Neuron 虽然也有 w1 w2,但 w1 跟 w2 是乘以 x1&#39; x2&#39;,所以它的</span><strong><span>输出不会跟上面这个 Neuron 一样</span></strong></p><div contenteditable="false" spellcheck="false" class="mathjax-block md-end-block md-math-block md-rawblock" id="mathjax-n516" cid="n516" mdtype="math_block"><div class="md-rawblock-container md-math-container" tabindex="-1"><div class="MathJax_SVG_Display" style="text-align: center;"><span class="MathJax_SVG" id="MathJax-Element-81-Frame" tabindex="-1" style="font-size: 100%; display: inline-block;"><svg xmlns:xlink="http://www.w3.org/1999/xlink" width="24.842ex" height="2.811ex" viewBox="0 -806.1 10695.8 1210.2" role="img" focusable="false" style="vertical-align: -0.938ex; max-width: 100%;"><defs><path stroke-width="0" id="E140-MJMATHI-3C3" d="M184 -11Q116 -11 74 34T31 147Q31 247 104 333T274 430Q275 431 414 431H552Q553 430 555 429T559 427T562 425T565 422T567 420T569 416T570 412T571 407T572 401Q572 357 507 357Q500 357 490 357T476 358H416L421 348Q439 310 439 263Q439 153 359 71T184 -11ZM361 278Q361 358 276 358Q152 358 115 184Q114 180 114 178Q106 141 106 117Q106 67 131 47T188 26Q242 26 287 73Q316 103 334 153T356 233T361 278Z"></path><path stroke-width="0" id="E140-MJMAIN-28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path><path stroke-width="0" id="E140-MJMATHI-77" d="M580 385Q580 406 599 424T641 443Q659 443 674 425T690 368Q690 339 671 253Q656 197 644 161T609 80T554 12T482 -11Q438 -11 404 5T355 48Q354 47 352 44Q311 -11 252 -11Q226 -11 202 -5T155 14T118 53T104 116Q104 170 138 262T173 379Q173 380 173 381Q173 390 173 393T169 400T158 404H154Q131 404 112 385T82 344T65 302T57 280Q55 278 41 278H27Q21 284 21 287Q21 293 29 315T52 366T96 418T161 441Q204 441 227 416T250 358Q250 340 217 250T184 111Q184 65 205 46T258 26Q301 26 334 87L339 96V119Q339 122 339 128T340 136T341 143T342 152T345 165T348 182T354 206T362 238T373 281Q402 395 406 404Q419 431 449 431Q468 431 475 421T483 402Q483 389 454 274T422 142Q420 131 420 107V100Q420 85 423 71T442 42T487 26Q558 26 600 148Q609 171 620 213T632 273Q632 306 619 325T593 357T580 385Z"></path><path stroke-width="0" id="E140-MJMAIN-31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path stroke-width="0" id="E140-MJMATHI-78" d="M52 289Q59 331 106 386T222 442Q257 442 286 424T329 379Q371 442 430 442Q467 442 494 420T522 361Q522 332 508 314T481 292T458 288Q439 288 427 299T415 328Q415 374 465 391Q454 404 425 404Q412 404 406 402Q368 386 350 336Q290 115 290 78Q290 50 306 38T341 26Q378 26 414 59T463 140Q466 150 469 151T485 153H489Q504 153 504 145Q504 144 502 134Q486 77 440 33T333 -11Q263 -11 227 52Q186 -10 133 -10H127Q78 -10 57 16T35 71Q35 103 54 123T99 143Q142 143 142 101Q142 81 130 66T107 46T94 41L91 40Q91 39 97 36T113 29T132 26Q168 26 194 71Q203 87 217 139T245 247T261 313Q266 340 266 352Q266 380 251 392T217 404Q177 404 142 372T93 290Q91 281 88 280T72 278H58Q52 284 52 289Z"></path><path stroke-width="0" id="E140-MJMAIN-2032" d="M79 43Q73 43 52 49T30 61Q30 68 85 293T146 528Q161 560 198 560Q218 560 240 545T262 501Q262 496 260 486Q259 479 173 263T84 45T79 43Z"></path><path stroke-width="0" id="E140-MJMAIN-2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z"></path><path stroke-width="0" id="E140-MJMAIN-32" d="M109 429Q82 429 66 447T50 491Q50 562 103 614T235 666Q326 666 387 610T449 465Q449 422 429 383T381 315T301 241Q265 210 201 149L142 93L218 92Q375 92 385 97Q392 99 409 186V189H449V186Q448 183 436 95T421 3V0H50V19V31Q50 38 56 46T86 81Q115 113 136 137Q145 147 170 174T204 211T233 244T261 278T284 308T305 340T320 369T333 401T340 431T343 464Q343 527 309 573T212 619Q179 619 154 602T119 569T109 550Q109 549 114 549Q132 549 151 535T170 489Q170 464 154 447T109 429Z"></path><path stroke-width="0" id="E140-MJMAIN-2026" d="M78 60Q78 84 95 102T138 120Q162 120 180 104T199 61Q199 36 182 18T139 0T96 17T78 60ZM525 60Q525 84 542 102T585 120Q609 120 627 104T646 61Q646 36 629 18T586 0T543 17T525 60ZM972 60Q972 84 989 102T1032 120Q1056 120 1074 104T1093 61Q1093 36 1076 18T1033 0T990 17T972 60Z"></path><path stroke-width="0" id="E140-MJMAIN-29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path></defs><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="matrix(1 0 0 -1 0 0)"><use xlink:href="#E140-MJMATHI-3C3" x="0" y="0"></use><use xlink:href="#E140-MJMAIN-28" x="572" y="0"></use><g transform="translate(961,0)"><use xlink:href="#E140-MJMATHI-77" x="0" y="0"></use><use transform="scale(0.707)" xlink:href="#E140-MJMAIN-31" x="1012" y="-213"></use></g><g transform="translate(2130,0)"><use xlink:href="#E140-MJMATHI-78" x="0" y="0"></use><use transform="scale(0.707)" xlink:href="#E140-MJMAIN-2032" x="808" y="444"></use><use transform="scale(0.707)" xlink:href="#E140-MJMAIN-31" x="808" y="-434"></use></g><use xlink:href="#E140-MJMAIN-2B" x="3378" y="0"></use><g transform="translate(4378,0)"><use xlink:href="#E140-MJMATHI-77" x="0" y="0"></use><use transform="scale(0.707)" xlink:href="#E140-MJMAIN-32" x="1012" y="-213"></use></g><g transform="translate(5548,0)"><use xlink:href="#E140-MJMATHI-78" x="0" y="0"></use><use transform="scale(0.707)" xlink:href="#E140-MJMAIN-2032" x="808" y="444"></use><use transform="scale(0.707)" xlink:href="#E140-MJMAIN-32" x="808" y="-434"></use></g><use xlink:href="#E140-MJMAIN-2B" x="6795" y="0"></use><use xlink:href="#E140-MJMAIN-2026" x="7796" y="0"></use><use xlink:href="#E140-MJMAIN-2026" x="9134" y="0"></use><use xlink:href="#E140-MJMAIN-29" x="10306" y="0"></use></g></svg></span></div><script type="math/tex; mode=display" id="MathJax-Element-81">\sigma(w_1x_1'+w_2x_2'+……)</script></div></div><p>&nbsp;</p></li></ul><p><span>所以两个 Neuron 守备的范围不一样,就算它们的参数一样,它们的输出也不会是一样的,所以这是第二个简化</span></p><h3><a name="simplification-2----typical-setting" class="md-header-anchor"></a><span>Simplification 2 – Typical Setting </span></h3><p><span>我们让一些 Neuron 可以共享参数,那</span><strong><span>至於要怎麼共享,你完全可以自己决定,而这个是你可以自己决定的事情</span></strong><span>,但是接下来还是要告诉大家,</span><strong><span>常见的在影像辨识上面的共享的方法</span></strong><span>,是怎麼设定的</span></p><p><span>那我们刚才已经讲说,每一个 Receptive Field,它都有一组 Neuron 在负责守备</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329191138276.png" alt="image-20210329191138276" style="zoom:50%;" /></p><p><span>比如说 64 个 Neuron,所以这个 Receptive Field有 64 个 Neuron,这个 Receptive Field 也有 64 个 Neuron,那它们彼此之间会怎麼共享参数呢</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210329191243099.png" alt="image-20210329191243099" style="zoom:50%;" /></p><p><span>我们这边用一样的顏色,就代表说这两个 Neuron,共享一样的参数</span></p><p><span>所以其实</span><strong><span>每一个 Receptive Field都只有一组参数而已</span></strong><span>,就是</span></p><ul><li><span>左上边这个 Receptive Field 的第一个红色 Neuron,会跟右下边这个 Receptive Field 的第一个 红色Neuron 共用参数</span></li><li><span>它的第二个橙色 Neuron,跟它的第二个 橙色Neuron 共用参数</span></li><li><span>它的第三个绿色Neuron,跟它的第三个绿色 Neuron 共用参数</span></li><li><span>所以每一个 Receptive Field,都只有一组参数而已</span></li></ul><p><span>那这些参数有一个名字，叫做 </span><mark><span>Filter</span></mark><span>,所以这两个红色 Neuron,它们共用同一组参数,这组参数就叫 Filter1,橙色这两个 Neuron 它们共同一组参数,这组参数就叫 Filter2 叫 Filter3 叫 Filter4,以此类推</span></p><h2><a name="benefit-of-convolutional-layer" class="md-header-anchor"></a><span>Benefit of Convolutional Layer </span></h2><p><span>目前已经讲了两个简化的方法,那我们来整理一下我们学到了什麼,这是 </span><strong><span>Fully Connected 的 Network</span></strong></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330085040401.png" alt="image-20210330085040401" style="zoom:50%;" /></p><p><span>它是</span><strong><span>弹性最大</span></strong><span>的,但有时候不需要看整张图片,也许</span><strong><span>只要看图片的一小部分</span></strong><span>就可以侦测出重要的 Pattern,所以我们有了 </span><strong><span>Receptive Field</span></strong><span> 的概念</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330085145465.png" alt="image-20210330085145465" style="zoom:50%;" /></p><p><span>当我们强制一个 Neuron只能看一张图片裡面的一个范围的时候,它的</span><strong><span>弹性是变小</span></strong><span>的,如果是 Fully Connected 的 Network,它可以决定看整张图片，还是只看一个范围,就如果它只想看一个范围,就把很多 Weight 设成 0,就只看一个范围，所以加入 Receptive Field 以后,你的 Network 的弹性是变小的</span></p><p><span>接下来我们还有权值共享,权值共享又更进一步限制了 Network 的弹性</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330085417478.png" alt="image-20210330085417478" style="zoom:50%;" /></p><p><span>本来在 Learning 的时候,它可以决定这两个 Network 的参数要是什麼,每一个 Neuron 可以各自有不同的参数,它们可以正好学出一模一样的参数,也可以有不一样的参数</span></p><p><span>但是加入参数共享以后,就意味著说 某一些 Neuron参数要一模一样,所以这又更增加了对 Neuron 的限制,而 </span><strong><span>Receptive Field 加上 Parameter Sharing,就是 </span><mark><span>Convolutional Layer</span></mark></strong></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330085630682.png" alt="image-20210330085630682" style="zoom:50%;" /></p><p><span>有用到 Convolutional Layer 的 Network,就叫 Convolutional Neural Network,就是 CNN,所以从这个图上啊,你可以很明显地看出,其实 </span><strong><span>CNN 的 Bias 比较大,它的 Model 的 Bias 比较大</span></strong></p><p><span>可能有小伙伴会说 Model Bias 比较大 不是一件坏事吗？</span></p><p><span>Model Bias 大，不一定是坏事</span></p><ul><li><span>因為当 </span><strong><span>Model Bias 小,Model 的 Flexibility 很高</span></strong><span>的时候,它比较</span><strong><span>容易 Overfitting</span></strong><span>,Fully Connected Layer可以做各式各样的事情,它可以有各式各样的变化,但是它可能没有办法在,任何特定的任务上做好</span></li><li><span>而 Convolutional Layer,它是专门為影像设计的,刚才讲的 Receptive Field 参数共享,这些观察 都是為影像设计的,所以它在影像上仍然可以做得好,虽然它的 Model Bias 很大,但这个在影像上不是问题,但是如果它用在影像之外的任务,你就要仔细想想,那些任务有没有我们刚才讲的,影像用的特性</span></li></ul><h2><a name="convolutional-layer" class="md-header-anchor"></a><span>Convolutional Layer </span></h2><p><span>我们以上讲的,影像用的特性,其实是 CNN 的某一种介绍方式,那现在我们要讲另外一种介绍方式,第二种介绍方式跟刚才讲的介绍方式是一模一样的,只是同一个故事,用不同的版本来说明</span></p><p><span>第二个版本是,你比较常见的说明 CNN 的方式,假设第一个版本,你听得有点迷迷糊糊的话,那我们来听第二个版本</span></p><p><span>第二个版本是这样的,</span><strong><span>Convolutional 的 Layer 就是裡面有很多的 Filter</span></strong></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330091401877.png" alt="image-20210330091401877" style="zoom:50%;" /></p><p><span>这些 Filter 啊 它们的大小是,3 × 3 × Channel 的 Size,如果今天是彩色图片的话,那就是 RGB 三个 Channel,如果是黑白的图片的话,它的 Channel 就等於 1</span></p><p><strong><span>一个 Convolutional 的 Layer 裡面就是有一排的 Filter</span></strong><span>,每一个 Filter ,它都是一个 3 × 3 × Channel,这麼大的 Tensor</span></p><p><strong><span>每一个 Filter 的作用就是要去图片裡面某一个 Pattern</span></strong><span>,当然这些 Pattern,要在 3 × 3 × Channel,那麼小的范围内啦,它才能够被这些 Filter 抓出来</span></p><p><span>那这些 Filter,怎麼去图片裡面抓 Pattern 的呢,我们现在举一个实际的例子</span></p><p><span> </span><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330152604185.png" alt="image-20210330152604185" style="zoom:50%;" /></p><p><span>例子裡面,我们假设 Channel 是 1,也就是说我们图片是</span><strong><span>黑白的图片</span></strong></p><p><span>那我们假设这些 Filter 的参数是已知的,Filter 就是一个一个的 Tensor,这个 Tensor 裡面的数值,我们都已经知道了,那实际上这些 Tensor 裡面的数值,其实就是 Model 裡面的 Parameter,这些 Filter 裡面的数值,</span><strong><span>其实是未知的,它是要透过gradient decent去找出来的</span></strong></p><p><span>那我们现在已经假设这些 Filter 裡面的数值已经找出来了,我们来看看说这些 Filter,是怎麼跟一张图片进行运作,怎麼去图片上面把 Pattern 侦测出来的</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330153005857.png" alt="image-20210330153005857" style="zoom:50%;" /></p><p><span>这是我们的图片,它是一个 6 × 6 的大小的图片,那这些 Filter的做法就是,先把 Filter 放在图片的左上角,然后</span><strong><span>把 Filter 裡面所有的值,跟左上角这个范围内的 9 个值做相乘</span></strong><span>,也就是把这个 Filter 裡面的 9 个值,跟这个范围裡面的 9 个值呢,做 Inner Product,做完是 3</span></p><p><mark><span>注意！在此处卷集运算中，老师讲的</span><strong><span>内积</span></strong><span>，</span><strong><span>不要理解为</span></strong><span>线性代数中</span><strong><span>矩阵的乘法</span></strong><span>，而是</span><strong><span>filter</span></strong><span>跟</span><strong><span>图片对应位置</span></strong><span>的数值</span><strong><span>直接相乘</span></strong><span>，所有的都乘完以后</span><strong><span>再相加</span></strong></mark></p><p><span>老师用的filter为</span><span class="MathJax_SVG" tabindex="-1" style="font-size: 100%; display: inline-block;"><svg xmlns:xlink="http://www.w3.org/1999/xlink" width="17.389ex" height="9.114ex" viewBox="0 -2213.4 7487.1 3924.2" role="img" focusable="false" style="vertical-align: -3.974ex;"><defs><path stroke-width="0" id="E193-MJMAIN-5B" d="M118 -250V750H255V710H158V-210H255V-250H118Z"></path><path stroke-width="0" id="E193-MJMAIN-31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path stroke-width="0" id="E193-MJMAIN-2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z"></path><path stroke-width="0" id="E193-MJMAIN-5D" d="M22 710V750H159V-250H22V-210H119V710H22Z"></path><path stroke-width="0" id="E193-MJSZ4-23A1" d="M319 -645V1154H666V1070H403V-645H319Z"></path><path stroke-width="0" id="E193-MJSZ4-23A3" d="M319 -644V1155H403V-560H666V-644H319Z"></path><path stroke-width="0" id="E193-MJSZ4-23A2" d="M319 0V602H403V0H319Z"></path><path stroke-width="0" id="E193-MJSZ4-23A4" d="M0 1070V1154H347V-645H263V1070H0Z"></path><path stroke-width="0" id="E193-MJSZ4-23A6" d="M263 -560V1155H347V-644H0V-560H263Z"></path><path stroke-width="0" id="E193-MJSZ4-23A5" d="M263 0V602H347V0H263Z"></path></defs><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="matrix(1 0 0 -1 0 0)"><g transform="translate(0,2150)"><use xlink:href="#E193-MJSZ4-23A1" x="0" y="-1154"></use><g transform="translate(0,-2051) scale(1,0.5016611295681063)"><use xlink:href="#E193-MJSZ4-23A2"></use></g><use xlink:href="#E193-MJSZ4-23A3" x="0" y="-3156"></use></g><g transform="translate(834,0)"><g transform="translate(-15,0)"><use xlink:href="#E193-MJMAIN-31" x="389" y="1350"></use><g transform="translate(0,-50)"><use xlink:href="#E193-MJMAIN-2212" x="0" y="0"></use><use xlink:href="#E193-MJMAIN-31" x="778" y="0"></use></g><g transform="translate(0,-1450)"><use xlink:href="#E193-MJMAIN-2212" x="0" y="0"></use><use xlink:href="#E193-MJMAIN-31" x="778" y="0"></use></g></g><g transform="translate(2263,0)"><g transform="translate(0,1350)"><use xlink:href="#E193-MJMAIN-2212" x="0" y="0"></use><use xlink:href="#E193-MJMAIN-31" x="778" y="0"></use></g><use xlink:href="#E193-MJMAIN-31" x="389" y="-50"></use><g transform="translate(0,-1450)"><use xlink:href="#E193-MJMAIN-2212" x="0" y="0"></use><use xlink:href="#E193-MJMAIN-31" x="778" y="0"></use></g></g><g transform="translate(4541,0)"><g transform="translate(0,1350)"><use xlink:href="#E193-MJMAIN-2212" x="0" y="0"></use><use xlink:href="#E193-MJMAIN-31" x="778" y="0"></use></g><g transform="translate(0,-50)"><use xlink:href="#E193-MJMAIN-2212" x="0" y="0"></use><use xlink:href="#E193-MJMAIN-31" x="778" y="0"></use></g><use xlink:href="#E193-MJMAIN-31" x="389" y="-1450"></use></g></g><g transform="translate(6820,2150)"><use xlink:href="#E193-MJSZ4-23A4" x="0" y="-1154"></use><g transform="translate(0,-2051) scale(1,0.5016611295681063)"><use xlink:href="#E193-MJSZ4-23A5"></use></g><use xlink:href="#E193-MJSZ4-23A6" x="0" y="-3156"></use></g></g></svg></span><script type="math/tex">\begin{bmatrix}
1&-1&-1\\
-1&1&-1\\
-1&-1&1\\
\end{bmatrix}</script><span>  与图片的第一个</span><span class="MathJax_SVG" tabindex="-1" style="font-size: 100%; display: inline-block;"><svg xmlns:xlink="http://www.w3.org/1999/xlink" width="5.162ex" height="1.994ex" viewBox="0 -755.9 2222.4 858.4" role="img" focusable="false" style="vertical-align: -0.238ex;"><defs><path stroke-width="0" id="E300-MJMAIN-33" d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z"></path><path stroke-width="0" id="E300-MJMAIN-D7" d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z"></path></defs><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="matrix(1 0 0 -1 0 0)"><use xlink:href="#E300-MJMAIN-33" x="0" y="0"></use><use xlink:href="#E300-MJMAIN-D7" x="722" y="0"></use><use xlink:href="#E300-MJMAIN-33" x="1722" y="0"></use></g></svg></span><script type="math/tex">3\times3</script><span>矩阵</span><span class="MathJax_SVG" tabindex="-1" style="font-size: 100%; display: inline-block;"><svg xmlns:xlink="http://www.w3.org/1999/xlink" width="11.968ex" height="9.114ex" viewBox="0 -2213.4 5153.1 3924.2" role="img" focusable="false" style="vertical-align: -3.974ex;"><defs><path stroke-width="0" id="E146-MJMAIN-5B" d="M118 -250V750H255V710H158V-210H255V-250H118Z"></path><path stroke-width="0" id="E146-MJMAIN-31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path stroke-width="0" id="E146-MJMAIN-30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z"></path><path stroke-width="0" id="E146-MJMAIN-5D" d="M22 710V750H159V-250H22V-210H119V710H22Z"></path><path stroke-width="0" id="E146-MJSZ4-23A1" d="M319 -645V1154H666V1070H403V-645H319Z"></path><path stroke-width="0" id="E146-MJSZ4-23A3" d="M319 -644V1155H403V-560H666V-644H319Z"></path><path stroke-width="0" id="E146-MJSZ4-23A2" d="M319 0V602H403V0H319Z"></path><path stroke-width="0" id="E146-MJSZ4-23A4" d="M0 1070V1154H347V-645H263V1070H0Z"></path><path stroke-width="0" id="E146-MJSZ4-23A6" d="M263 -560V1155H347V-644H0V-560H263Z"></path><path stroke-width="0" id="E146-MJSZ4-23A5" d="M263 0V602H347V0H263Z"></path></defs><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="matrix(1 0 0 -1 0 0)"><g transform="translate(0,2150)"><use xlink:href="#E146-MJSZ4-23A1" x="0" y="-1154"></use><g transform="translate(0,-2051) scale(1,0.5016611295681063)"><use xlink:href="#E146-MJSZ4-23A2"></use></g><use xlink:href="#E146-MJSZ4-23A3" x="0" y="-3156"></use></g><g transform="translate(834,0)"><g transform="translate(-15,0)"><use xlink:href="#E146-MJMAIN-31" x="0" y="1350"></use><use xlink:href="#E146-MJMAIN-30" x="0" y="-50"></use><use xlink:href="#E146-MJMAIN-30" x="0" y="-1450"></use></g><g transform="translate(1485,0)"><use xlink:href="#E146-MJMAIN-30" x="0" y="1350"></use><use xlink:href="#E146-MJMAIN-31" x="0" y="-50"></use><use xlink:href="#E146-MJMAIN-30" x="0" y="-1450"></use></g><g transform="translate(2985,0)"><use xlink:href="#E146-MJMAIN-30" x="0" y="1350"></use><use xlink:href="#E146-MJMAIN-30" x="0" y="-50"></use><use xlink:href="#E146-MJMAIN-31" x="0" y="-1450"></use></g></g><g transform="translate(4486,2150)"><use xlink:href="#E146-MJSZ4-23A4" x="0" y="-1154"></use><g transform="translate(0,-2051) scale(1,0.5016611295681063)"><use xlink:href="#E146-MJSZ4-23A5"></use></g><use xlink:href="#E146-MJSZ4-23A6" x="0" y="-3156"></use></g></g></svg></span><script type="math/tex">\begin{bmatrix}
1&0&0\\
0&1&0\\
0&0&1\\
\end{bmatrix}</script><span> 做卷积运算的过程为</span></p><p><span class="MathJax_SVG" tabindex="-1" style="font-size: 100%; display: inline-block;"><svg xmlns:xlink="http://www.w3.org/1999/xlink" width="100.534ex" height="2.577ex" viewBox="0 -806.1 43285.1 1109.7" role="img" focusable="false" style="vertical-align: -0.705ex;"><defs><path stroke-width="0" id="E281-MJMAIN-28" d="M94 250Q94 319 104 381T127 488T164 576T202 643T244 695T277 729T302 750H315H319Q333 750 333 741Q333 738 316 720T275 667T226 581T184 443T167 250T184 58T225 -81T274 -167T316 -220T333 -241Q333 -250 318 -250H315H302L274 -226Q180 -141 137 -14T94 250Z"></path><path stroke-width="0" id="E281-MJMAIN-31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path stroke-width="0" id="E281-MJMAIN-D7" d="M630 29Q630 9 609 9Q604 9 587 25T493 118L389 222L284 117Q178 13 175 11Q171 9 168 9Q160 9 154 15T147 29Q147 36 161 51T255 146L359 250L255 354Q174 435 161 449T147 471Q147 480 153 485T168 490Q173 490 175 489Q178 487 284 383L389 278L493 382Q570 459 587 475T609 491Q630 491 630 471Q630 464 620 453T522 355L418 250L522 145Q606 61 618 48T630 29Z"></path><path stroke-width="0" id="E281-MJMAIN-29" d="M60 749L64 750Q69 750 74 750H86L114 726Q208 641 251 514T294 250Q294 182 284 119T261 12T224 -76T186 -143T145 -194T113 -227T90 -246Q87 -249 86 -250H74Q66 -250 63 -250T58 -247T55 -238Q56 -237 66 -225Q221 -64 221 250T66 725Q56 737 55 738Q55 746 60 749Z"></path><path stroke-width="0" id="E281-MJMAIN-2B" d="M56 237T56 250T70 270H369V420L370 570Q380 583 389 583Q402 583 409 568V270H707Q722 262 722 250T707 230H409V-68Q401 -82 391 -82H389H387Q375 -82 369 -68V230H70Q56 237 56 250Z"></path><path stroke-width="0" id="E281-MJMAIN-2212" d="M84 237T84 250T98 270H679Q694 262 694 250T679 230H98Q84 237 84 250Z"></path><path stroke-width="0" id="E281-MJMAIN-30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z"></path><path stroke-width="0" id="E281-MJMAIN-3D" d="M56 347Q56 360 70 367H707Q722 359 722 347Q722 336 708 328L390 327H72Q56 332 56 347ZM56 153Q56 168 72 173H708Q722 163 722 153Q722 140 707 133H70Q56 140 56 153Z"></path><path stroke-width="0" id="E281-MJMAIN-33" d="M127 463Q100 463 85 480T69 524Q69 579 117 622T233 665Q268 665 277 664Q351 652 390 611T430 522Q430 470 396 421T302 350L299 348Q299 347 308 345T337 336T375 315Q457 262 457 175Q457 96 395 37T238 -22Q158 -22 100 21T42 130Q42 158 60 175T105 193Q133 193 151 175T169 130Q169 119 166 110T159 94T148 82T136 74T126 70T118 67L114 66Q165 21 238 21Q293 21 321 74Q338 107 338 175V195Q338 290 274 322Q259 328 213 329L171 330L168 332Q166 335 166 348Q166 366 174 366Q202 366 232 371Q266 376 294 413T322 525V533Q322 590 287 612Q265 626 240 626Q208 626 181 615T143 592T132 580H135Q138 579 143 578T153 573T165 566T175 555T183 540T186 520Q186 498 172 481T127 463Z"></path></defs><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="matrix(1 0 0 -1 0 0)"><use xlink:href="#E281-MJMAIN-28" x="0" y="0"></use><use xlink:href="#E281-MJMAIN-31" x="389" y="0"></use><use xlink:href="#E281-MJMAIN-D7" x="1111" y="0"></use><use xlink:href="#E281-MJMAIN-31" x="2111" y="0"></use><use xlink:href="#E281-MJMAIN-29" x="2611" y="0"></use><use xlink:href="#E281-MJMAIN-2B" x="3222" y="0"></use><use xlink:href="#E281-MJMAIN-28" x="4222" y="0"></use><use xlink:href="#E281-MJMAIN-2212" x="4611" y="0"></use><use xlink:href="#E281-MJMAIN-31" x="5389" y="0"></use><use xlink:href="#E281-MJMAIN-D7" x="6112" y="0"></use><use xlink:href="#E281-MJMAIN-30" x="7112" y="0"></use><use xlink:href="#E281-MJMAIN-29" x="7612" y="0"></use><use xlink:href="#E281-MJMAIN-2B" x="8223" y="0"></use><use xlink:href="#E281-MJMAIN-28" x="9223" y="0"></use><use xlink:href="#E281-MJMAIN-2212" x="9612" y="0"></use><use xlink:href="#E281-MJMAIN-31" x="10390" y="0"></use><use xlink:href="#E281-MJMAIN-D7" x="11113" y="0"></use><use xlink:href="#E281-MJMAIN-30" x="12113" y="0"></use><use xlink:href="#E281-MJMAIN-29" x="12613" y="0"></use><use xlink:href="#E281-MJMAIN-2B" x="13224" y="0"></use><use xlink:href="#E281-MJMAIN-28" x="14224" y="0"></use><use xlink:href="#E281-MJMAIN-2212" x="14613" y="0"></use><use xlink:href="#E281-MJMAIN-31" x="15391" y="0"></use><use xlink:href="#E281-MJMAIN-D7" x="16113" y="0"></use><use xlink:href="#E281-MJMAIN-30" x="17114" y="0"></use><use xlink:href="#E281-MJMAIN-29" x="17614" y="0"></use><use xlink:href="#E281-MJMAIN-2B" x="18225" y="0"></use><use xlink:href="#E281-MJMAIN-28" x="19225" y="0"></use><use xlink:href="#E281-MJMAIN-31" x="19614" y="0"></use><use xlink:href="#E281-MJMAIN-D7" x="20336" y="0"></use><use xlink:href="#E281-MJMAIN-31" x="21337" y="0"></use><use xlink:href="#E281-MJMAIN-29" x="21837" y="0"></use><use xlink:href="#E281-MJMAIN-2B" x="22448" y="0"></use><use xlink:href="#E281-MJMAIN-28" x="23448" y="0"></use><use xlink:href="#E281-MJMAIN-2212" x="23837" y="0"></use><use xlink:href="#E281-MJMAIN-31" x="24615" y="0"></use><use xlink:href="#E281-MJMAIN-D7" x="25337" y="0"></use><use xlink:href="#E281-MJMAIN-30" x="26337" y="0"></use><use xlink:href="#E281-MJMAIN-29" x="26837" y="0"></use><use xlink:href="#E281-MJMAIN-2B" x="27449" y="0"></use><use xlink:href="#E281-MJMAIN-28" x="28449" y="0"></use><use xlink:href="#E281-MJMAIN-2212" x="28838" y="0"></use><use xlink:href="#E281-MJMAIN-31" x="29616" y="0"></use><use xlink:href="#E281-MJMAIN-D7" x="30338" y="0"></use><use xlink:href="#E281-MJMAIN-30" x="31338" y="0"></use><use xlink:href="#E281-MJMAIN-29" x="31838" y="0"></use><use xlink:href="#E281-MJMAIN-2B" x="32450" y="0"></use><use xlink:href="#E281-MJMAIN-28" x="33450" y="0"></use><use xlink:href="#E281-MJMAIN-2212" x="33839" y="0"></use><use xlink:href="#E281-MJMAIN-31" x="34617" y="0"></use><use xlink:href="#E281-MJMAIN-D7" x="35339" y="0"></use><use xlink:href="#E281-MJMAIN-30" x="36339" y="0"></use><use xlink:href="#E281-MJMAIN-29" x="36839" y="0"></use><use xlink:href="#E281-MJMAIN-2B" x="37450" y="0"></use><use xlink:href="#E281-MJMAIN-28" x="38451" y="0"></use><use xlink:href="#E281-MJMAIN-31" x="38840" y="0"></use><use xlink:href="#E281-MJMAIN-D7" x="39562" y="0"></use><use xlink:href="#E281-MJMAIN-31" x="40562" y="0"></use><use xlink:href="#E281-MJMAIN-29" x="41062" y="0"></use><use xlink:href="#E281-MJMAIN-3D" x="41729" y="0"></use><use xlink:href="#E281-MJMAIN-33" x="42785" y="0"></use></g></svg></span><script type="math/tex">(1\times1)+(-1\times0)+(-1\times0)+(-1\times0)+(1\times1)+(-1\times0)+(-1\times0)+(-1\times0)+(1\times1)=3</script></p><p>&nbsp;</p><p><span>在下图中 filter为</span><span class="MathJax_SVG" tabindex="-1" style="font-size: 100%; display: inline-block;"><svg xmlns:xlink="http://www.w3.org/1999/xlink" width="11.968ex" height="9.114ex" viewBox="0 -2213.4 5153.1 3924.2" role="img" focusable="false" style="vertical-align: -3.974ex;"><defs><path stroke-width="0" id="E156-MJMAIN-5B" d="M118 -250V750H255V710H158V-210H255V-250H118Z"></path><path stroke-width="0" id="E156-MJMAIN-31" d="M213 578L200 573Q186 568 160 563T102 556H83V602H102Q149 604 189 617T245 641T273 663Q275 666 285 666Q294 666 302 660V361L303 61Q310 54 315 52T339 48T401 46H427V0H416Q395 3 257 3Q121 3 100 0H88V46H114Q136 46 152 46T177 47T193 50T201 52T207 57T213 61V578Z"></path><path stroke-width="0" id="E156-MJMAIN-30" d="M96 585Q152 666 249 666Q297 666 345 640T423 548Q460 465 460 320Q460 165 417 83Q397 41 362 16T301 -15T250 -22Q224 -22 198 -16T137 16T82 83Q39 165 39 320Q39 494 96 585ZM321 597Q291 629 250 629Q208 629 178 597Q153 571 145 525T137 333Q137 175 145 125T181 46Q209 16 250 16Q290 16 318 46Q347 76 354 130T362 333Q362 478 354 524T321 597Z"></path><path stroke-width="0" id="E156-MJMAIN-5D" d="M22 710V750H159V-250H22V-210H119V710H22Z"></path><path stroke-width="0" id="E156-MJSZ4-23A1" d="M319 -645V1154H666V1070H403V-645H319Z"></path><path stroke-width="0" id="E156-MJSZ4-23A3" d="M319 -644V1155H403V-560H666V-644H319Z"></path><path stroke-width="0" id="E156-MJSZ4-23A2" d="M319 0V602H403V0H319Z"></path><path stroke-width="0" id="E156-MJSZ4-23A4" d="M0 1070V1154H347V-645H263V1070H0Z"></path><path stroke-width="0" id="E156-MJSZ4-23A6" d="M263 -560V1155H347V-644H0V-560H263Z"></path><path stroke-width="0" id="E156-MJSZ4-23A5" d="M263 0V602H347V0H263Z"></path></defs><g stroke="currentColor" fill="currentColor" stroke-width="0" transform="matrix(1 0 0 -1 0 0)"><g transform="translate(0,2150)"><use xlink:href="#E156-MJSZ4-23A1" x="0" y="-1154"></use><g transform="translate(0,-2051) scale(1,0.5016611295681063)"><use xlink:href="#E156-MJSZ4-23A2"></use></g><use xlink:href="#E156-MJSZ4-23A3" x="0" y="-3156"></use></g><g transform="translate(834,0)"><g transform="translate(-15,0)"><use xlink:href="#E156-MJMAIN-31" x="0" y="1350"></use><use xlink:href="#E156-MJMAIN-30" x="0" y="-50"></use><use xlink:href="#E156-MJMAIN-31" x="0" y="-1450"></use></g><g transform="translate(1485,0)"><use xlink:href="#E156-MJMAIN-30" x="0" y="1350"></use><use xlink:href="#E156-MJMAIN-31" x="0" y="-50"></use><use xlink:href="#E156-MJMAIN-30" x="0" y="-1450"></use></g><g transform="translate(2985,0)"><use xlink:href="#E156-MJMAIN-31" x="0" y="1350"></use><use xlink:href="#E156-MJMAIN-30" x="0" y="-50"></use><use xlink:href="#E156-MJMAIN-31" x="0" y="-1450"></use></g></g><g transform="translate(4486,2150)"><use xlink:href="#E156-MJSZ4-23A4" x="0" y="-1154"></use><g transform="translate(0,-2051) scale(1,0.5016611295681063)"><use xlink:href="#E156-MJSZ4-23A5"></use></g><use xlink:href="#E156-MJSZ4-23A6" x="0" y="-3156"></use></g></g></svg></span><script type="math/tex">\begin{bmatrix}
1&0&1\\
0&1&0\\
1&0&1\\
\end{bmatrix}</script><span>  大家可以自行验证</span></p><p><img src="https://easy-ai.oss-cn-shanghai.aliyuncs.com/2019-06-19-juanji.gif" style="zoom:50%;" /></p><p><span>接下来这个 Filter 呢,本来放在左上角,接下来就往右移一点,那这个移动的距离叫做 </span><mark><span>Stride</span></mark></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330154900422.png" alt="image-20210330154900422" style="zoom:50%;" /></p><p><span>那在刚才讲前一个版本的故事的时候,我们的 Stride 是设 2,那在这个版本的故事裡面,我们 Stride 就设為 1,那往右移一点,然后再把这个 Filter,跟这个范围裡面的数值,算 Inner Product 算出来是 -1 </span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330155019300.png" alt="image-20210330155019300" style="zoom: 33%;" /></p><p><span>然后就以此类推,再往右移一点 再算一下,然后这边全部扫完以后,就往下移一点 再算一下,以此类推,一直到把这个 Filter 放在右下角,算出一个数值,答案就是 -1 就这样</span></p><p><span>这个 Filter 怎麼说它在侦测 Pattern 呢</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330155357311.png" alt="image-20210330155357311" style="zoom: 33%;" /></p><p><span>你看这个 Filter 裡面,它</span><strong><span>对角线的地方都是1</span></strong><span>,所以它看到 Image 裡面也出现连三个 1 的时候,它的数值会最大</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330155504450.png" alt="image-20210330155504450" style="zoom: 33%;" /></p><p><span>所以你会发现左上角的地方的值最大,左下角的地方的值最大,就告诉我们说,这个图片裡面左上角有出现 3,左上角有出现这个 Pattern,左下角有出现这个,三个 1 连在一起的 Pattern,这个是第一个 Filter</span></p><p><span>好 那接下来呢,我们把每一个 Filter,都做重复的 Process,比如说这边有第二个 Filter</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330155805207.png" alt="image-20210330155805207" style="zoom: 33%;" /></p><p><span>我们就把第二个 Filter,先从左上角开始扫起,得到一个数值,往右移一点 再得到一个数值,再往右移一点 再得到一个数值,反覆同样的 Process,反覆同样的操作,直到把整张图片都扫完,我们又得到另外一群数值</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330161012801.png" alt="image-20210330161012801" style="zoom: 33%;" /></p><p><span>所以每一个 Filter,都会给我们一群数字,红色的 Filter 给我们一群数字,蓝色的 Filter 给我们一群数字,如果我们有 64 个 Filter,我们就得到 64 群的数字了,那这一群数字啊,它又有一个名字,它叫做 </span><mark><span>Feature Map</span></mark></p><p>&nbsp;</p><p><span>所以当我们把一张图片,通过一个 Convolutional Layer,裡面有一堆 Filter 的时候,我们產生出来了一个 Feature Map</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330161229506.png" alt="image-20210330161229506" style="zoom: 33%;" /></p><p><span>那假设这个 Convolutional Layer裡面,它有 64 个 Filter,那我们產生出来64个 Feature Map,每一组在这个例子裡面是 4 × 4，这个 </span><strong><span>Feature Map你可以看成是,另外一张新的图片</span></strong></p><p><span>只是这个图片的 Channel 它有 64 个,而且这并不是 RGB 这个图片的 Channel,在这里</span><strong><span>每一个 Channel 就对应到一个 Filter</span></strong><span>,本来一张图片它三个 Channel,通过一个 Convolution,它变成一张新的图片,有 64 个 Channel</span></p><p><span>这个 </span><strong><span>Convolutional Layer 是可以叠很多层的</span></strong><span>,刚才是叠了第一层,那如果叠第二层会发生什麼事呢</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330161535127.png" alt="image-20210330161535127" style="zoom: 33%;" /></p><p><strong><span>第二层的 Convolution</span></strong><span> 裡面,也有一堆的 Filter,那每一个 Filter 呢,它的大小我们这边也设 3 × 3,那</span><strong><span>它的高度必须设為 64</span></strong></p><p><strong><span>Filter 的这个高度就是它要处理的影像的 Channel</span></strong><span>,所以跟刚才第一层的 Convolution,假设输入的影像是黑白的 Channel是 1,那我们的 Filter 的高度就是 1,输入的影像如果是彩色的 Channel 是 3,那 Filter 的高度就是 3,那在第二层裡面,我们也会得到一张影像,对第二个 Convolutional Layer 来说,它的输入也是一张图片,那这个图片的 Channel 是多少,这个图片的 Channel 是 64</span></p><p><span>这个 64 是前一个 Convolutional Layer 的,Filter 数目,前一个 Convolutional Layer,它 Filter 数目 64,那输出以后就是 64 个 Channel</span></p><p>&nbsp;</p><p><strong><span>如果我们的 Filter 的大小一直设 3 × 3,会不会让我们的 Network,没有办法看比较大范围的 Pattern 呢</span></strong></p><p><span>其实不会的,因為你想想看,如果我们在第二层 Convolutional Layer,我们的 Filter 的大小一样设 3 × 3 的话,会发生什麼事情呢</span></p><p><span>如果我们一样设 3 × 3 的话,当我们看最左上角这个数值的时候,最左上角这个数值在影像上,其实是对应到这个范围,</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330162504718.png" alt="image-20210330162504718" style="zoom:33%;" /></p><p><span>右下角的数值在影像上,其实是对应到这个范围,</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330162532833.png" alt="image-20210330162532833" style="zoom:33%;" /></p><p><span>所以当我们看这 3 × 3 的范围的时候,和第一个 Convolutional Layer 的输出的,这个 Feature Map 的,3 × 3 的范围的时候,我们在原来的影像上,其实是考虑了一个 5 × 5 的范围</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330162621285.png" alt="image-20210330162621285" style="zoom: 33%;" /></p><p><span>所以虽然我们的 Filter 只有 3 × 3,但它在影像上考虑的范围,是比较大的 是 5 × 5,所以今天你的 N</span><strong><span>etwork 叠得越深,同样是 3 × 3 的大小的 Filter,它看的范围就会越来越大</span></strong><span>,所以 Network 够深,你不用怕你侦测不到比较大的 Pattern,它还是可以侦测到比较大的 Pattern</span></p><p>&nbsp;</p><p><span>刚才我们讲了两个版本的故事了,那这两个版本的故事,是一模一样的</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330163033020.png" alt="image-20210330163033020" style="zoom: 33%;" /></p><p><span>我们在第一个版本的故事裡面,说到了有一些 Neuron,这些 Neuron 会共用参数,这些</span><strong><span>共用的参数,就是第二个版本的故事裡面的 Filter</span></strong></p><p><span>我们这个 Filter 裡面有 3 × 3 × 3个数字,我这边特别还</span><strong><span>用顏色,把这些数字圈起来,告诉你说 这个 Weight 就是这个数字</span></strong></p><p><span>以此类推,那这边我把 Bias 去掉了, Neuron 这个是有 Bias 的,这个 Filter 有没有 Bias 呢,其实是有的,只是在刚才的故事裡面没有提到,在一般的这个实作上,你的 CNN 的这些 Filter,其实都还是有那个 Bias 的数值的</span></p><p>&nbsp;</p><p><span>在刚才第一个版本的故事裡面,我们说不同的 Neuron,它们可以 Share Weight,然后去守备不同的范围,而 </span><strong><span>Share Weight 这件事,其实就是我们把 Filter 扫过一张图片</span></strong></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330163810316.png" alt="image-20210330163810316" style="zoom: 33%;" /></p><p><span>那把 F</span><strong><span>ilter 扫过一张图片这件事,其实就是 Convolution</span></strong><span>,这就是為什麼 Convolutional Layer,要叫 Convolutional Layer 的关係</span></p><p><span>那所谓的把 Filter 扫过图片这件事情,其实就是不同的 Receptive Field,Neuron 可以共用参数,而这组共用的参数,就叫做一个 Filter</span></p><p><span>今天特别从两个不同的面向,讲 CNN 这个东西,希望可以帮助你对 CNN 有更深地了解</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330164622894.png" alt="image-20210330164622894" style="zoom: 50%;" /></p><p><span>為什麼用 CNN 是基於两个观察</span></p><ul><li><span>第一个观察是 我们不需要看整张图片,那对 Neuron 的故事版本,对於第一个故事而言就是,Neuron 只看图片的一小部分,对 Filter 的故事而言就是,我们有一组 Filter,每个 Filter 只看一个小范围,它只侦测小的 Pattern</span></li><li><span>然后我们说 同样的 Pattern,可能出现在图片的不同的地方,所以 Neuron 间可以共用参数,对 Filter 的故事而言就是,一个 Filter 要扫过整张图片,这个就是 Convolutional Layer</span></li></ul><p>&nbsp;</p><h2><a name="observation-3" class="md-header-anchor"></a><span>Observation 3</span></h2><p><span> Convolutional Layer,在做影像辨识的时候呢,其实还有第三个常用的东西,这个东西呢 叫做 Pooling,那 Pooling 是怎麼来的呢</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330164857135.png" alt="image-20210330164857135" style="zoom:50%;" /></p><p><span>Pooling 来自於另外一个观察</span></p><p><span>我们把一张比较大的图片做 Subsampling,举例来说你把偶数的 Column 都拿掉,奇数的 Row 都拿掉,图片变成為原来的1/4,但是不会影响裡面是什麼东西,把一张大的图片缩小,这是一隻鸟,这张小的图片看起来还是一隻鸟</span></p><p><span>那所以呢 有了Pooling 这样的设计,那 Pooling 是怎麼运作的呢</span></p><p>&nbsp;</p><p><span>Pooling 这个东西啊,它本身没有参数,所以它不是一个 Layer,它裡面没有 Weight,它没有要 Learn 的东西,所以有人会告诉你说 Pooling 比较像是一个 Activation Function,比较像是 Sigmoid ， ReLU 那些,因為它裡面是没有要 Learn 的东西的,它就是一个 Operator,它的行為都是固定好的,没有要根据 Data 学任何东西</span></p><p><span>那 Pooling 其实也有很多不同的版本,我们这边讲的是 Max Pooling</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330165950177.png" alt="image-20210330165950177" style="zoom: 33%;" /></p><p><span>刚才说每一个 Filter 都產生一把数字,要做 Pooling 的时候,我们就把这些数字几个几个一组,比如说在这个例子裡面就是 2×2 个一组,每一组裡面选一个代表,在 Max Pooling 裡面,我们选的代表就是</span><strong><span>最大的那一个</span></strong></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330170356117.png" alt="image-20210330170356117" style="zoom: 33%;" /></p><p><span>你不一定要选最大的那一个,这个是你自己可以决定的,Max Pooling 这一个方法是选最大的那一个,但是也有 average Pooling ，就是选平均嘛,还有选几何平均的,所以有各式各样的 Pooling 的方法</span></p><p><span>也一定要 2×2 个一组吗,这个也是你自己决定的,你要 3×3 4×4 也可以</span></p><h2><a name="convolutional-layers--pooling" class="md-header-anchor"></a><span>Convolutional Layers + Pooling </span></h2><p><span>所以我们做完 Convolution 以后,往往后面还会搭配 Pooling,那 </span><strong><span>Pooling 做的事情就是把图片变小</span></strong><span>,做完 Convolution 以后我们会得到一张图片,这一张图片裡面有很多的 Channel,那做完 Pooling 以后,我们就是把这张图片的 Channel 不变,本来 64 个 Channel 还是 64 个 Channel,但是我们会把图片变得比较狭长一点</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330170700272.png" alt="image-20210330170700272" style="zoom:50%;" /></p><p><span>在刚才的例子裡面,本来 4×4 的图片,如果我们把这个 Output 的数值啊,2×2 个一组的话,那 4×4 的图片就会变成 2×2 的图片,这个就是 Pooling 所做的事情</span></p><p><strong><span>那一般在实作上啊,往往就是 Convolution 跟 Pooling 交替使用</span></strong><span>,就是你可能做几次 Convolution,做一次 Pooling,比如两次 Convolution 一次 Pooling,两次 Convolution 一次 Pooling</span></p><p><span>不过你可以想见说 </span><strong><span>Pooling,对於你的 Performance,还是可能会带来一点伤害的</span></strong><span>,因為假设你今天要侦测的是非常微细的东西,那你随便做 Subsampling,Performance 可能会稍微差一点</span></p><p><span>所以近年来你会发现,很多影像电视的 Network 的设计,往往也开始把 Pooling 丢掉,他会做这种,Full Convolution 的 Neural Network,就整个 Network 裡面统统都是 Convolution,完全都不用 Pooling</span></p><p><span>那是因為近年来运算能力越来越强,Pooling 最主要的理由是為了减少运算量,做 Subsampling,把影像变少 减少运算量,那如果你今天你的运算资源,足够支撑你不做 Pooling 的话,很多 Network 的架构的设计,往往今天就不做 Pooling,全 Convolution,Convolution 从头到尾,然后看看做不做得起来,看看能不能做得更好</span></p><h3><a name="the-whole-cnn" class="md-header-anchor"></a><span>The whole CNN</span></h3><p><span>那一般以后,你的架构就是 Convolution 加 Pooling,那我刚才讲过说 Pooling 是可有可无啦,今天很多人可能会选择不用 Pooling,好 那如果你做完几次 Convolution 以后,接下来呢,最终怎麼得到最后的结果呢</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330171219295.png" alt="image-20210330171219295" style="zoom: 50%;" /></p><p><span>你会把 Pooling 的 Output 做一件事情,叫做 Flatten,Flatten 的意思就是,把这个影像裡面啊,本来排成矩阵的样子的东西拉直,把所有的数值拉直变成一个向量,再把这个向量,丢进 Fully Connected 的 Layer 裡面</span></p><p><span>最终你可能还要过个 Softmax,然后最终得到影像辨识的结果,这就是一个经典的影像辨识的Network,它可能有的样子就是长这样,裡面有 Convolution,有 Pooling 有 Flatten,最后再通过几个,Fully Connected 的 Layer 或 Softmax,最终得到影像辨识的结果</span></p><h2><a name="application-alpha-go" class="md-header-anchor"></a><span>Application： Alpha Go</span></h2><p><span>那除了影像辨识以外啊,你可能听过 CNN 另外一个最常见的,最耳熟能详的应用,就是用来下围棋,那今天呢 如果讲个机器学习的课,没有提到 AlphaGo,大家就觉得你什麼都没有讲对不对,所以我们来提一下 AlphaGo,好 怎麼用这个 CNN 来下围棋呢</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330171913676.png" alt="image-20210330171913676" style="zoom:50%;" /></p><p><span>我们说下围棋其实就是一个分类的问题,你的 Network 的输入,是棋盘上黑子跟白子的位置,你的输出就是下一步应该要落子的位置</span></p><p><span>可是我们今天已经知道说,Network 的输入就是一个向量啊,那</span><strong><span>怎麼把棋盘表示成一个向量</span></strong><span>呢,完全没有问题,棋盘上就是有 19 × 19 个位置嘛,那我们就把一个棋盘,表示成一个 19 × 19 维的向量,在这个向量裡面,如果某一个位置有一个黑子,那那个位置我们就填 1,如果白子我们就填 -1,如果没有子我们就填 0</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330172015868.png" alt="image-20210330172015868" style="zoom:50%;" /></p><p><span>我们就可以告诉 Network 说,现在棋盘上的盘势长什麼样,我们可以用一个 19 × 19 维的向量,来描述一个棋盘,当然这不一定是要这麼做啦,不一定要黑子是 1 白子是 -1,然后没有子就是 0,这只是一个可能的表示方式而已,你们可以想出其他更神奇的表示方式,总之我们有办法把棋盘上的盘势,用一个向量来描述</span></p><p><span>把这个向量输到一个 Network 裡面,然后呢,你就可以把下围棋当作一个分类的问题,叫这个 Network 去预测,下一步应该落子的位置落在哪裡最好</span></p><p><span>所以下围棋,就是一个有 19 × 19 个类别的分类的问题,Network 会 Output 说,在这 19 × 19 个类别裡面,哪一个类别是最好的,应该要选择下一步落子的位置应该在哪裡,那这个问题完全可以用一个,Fully Connected 的 Network 来解决,但是用 </span><strong><span>CNN 的效果更好</span></strong></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330172138162.png" alt="image-20210330172138162" style="zoom:50%;" /></p><p><span>為什麼用 CNN 的效果更好呢,首先你完全可以把一个棋盘,看作是一张图片,一个棋盘,可以看作是一个解析度 19 × 19 的图片,一般图片很大,一般图片可能都 100 × 100 的解析度,都是很小的图片了啊,但是棋盘是一个更小的图片,这个图片它的解析度只有 19 × 19,这个图片裡面每一个像素 每一个 Pixel,就代表棋盘上一个可以落子的位置</span></p><p><span>那 Channel 呢,一般图片的 Channel 就是 RGB 嘛,RGB 代表一个顏色,那棋盘上每一个 Pixel 的 Channel,应该是什麼呢</span></p><p><span>在 AlphaGo 的原始论文裡面它告诉你说,每一个棋盘的位置,</span><strong><span>每一个棋盘上的 Pixel,它是用 48 个 Channel 来描述</span></strong><span>,也就是说棋盘上的每一个位置,它都用 48 个数字,来描述那个位置发生了什麼事</span></p><p><span>那至於為什麼是这 48 个,那这个显然是围棋高手设计出来的,那 48 个位置包括,比如说 啊 这个位置是不是要被叫吃了,这个位置旁边有没有顏色不一样的等等,就是这样子描述每一个位置,所以你会用 48 个数字,来描述棋盘上的一个位置,这一个棋盘它就是 19 × 19 的解析度的图片,它的 Channel 就是 48,</span></p><p>&nbsp;</p><p><span>但是為什麼 CNN 可以用在下围棋上呢,我们刚才就有强调说 </span><strong><span>CNN ,其实并不是你随便用都会好的,它是為影像设计的</span></strong><span>,所以如果一个问题,它跟影像没有什麼共通的特性的话,你其实不该用 CNN,所以今天既然在下围棋可以用 CNN,那意味著什麼,那意味著围棋跟影像有共同的特性,什麼样共同的特性呢</span></p><h3><a name="why-cnn-for-go-playing" class="md-header-anchor"></a><span>Why CNN for Go playing?</span></h3><p><span>我们刚才讲说在影像上的</span><strong><span>第一个观察</span></strong><span>是,很多重要的 Pattern,你只需要看小范围就知道,下围棋是不是也是一样呢</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330172519672.png" alt="image-20210330172519672" style="zoom:50%;" /></p><p><span>举例来说这一个 Pattern,你就算</span><strong><span>不用看整个棋盘的盘势,你都知道说这边发生了什麼事</span></strong><span>,这个就是白子被黑子围住了嘛,那接下来黑子如果放在这边,就可以把白子提走,那白子要放在这边才不会,才可以接这个白子 才不会被提走,那其实在 AlphaGo 裡面啊,它的第一层的 Layer,它的 Filter 的大小就是 5 × 5,所以显然在设计这个 Network 的人觉得说,棋盘上很多重要的 Pattern,也许看 5 × 5 的范围就可以知道了</span></p><p><span>再来是我们说影像上的</span><strong><span>第二个观察</span></strong><span>是,同样的 Pattern 可能会出现在不同的位置,在下围棋裡面是不是也是一样呢,</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330172624575.png" alt="image-20210330172624575" style="zoom:50%;" /></p><p><span>这个叫吃的 Pattern,它可以出现在棋盘上的任何位置,它可以出现在左上角,也可以出现在右下角,所以从这个观点来看,影像跟下围棋有很多共同之处</span></p><p>&nbsp;</p><p><span>但是让人想不透的地方是,在做影像的时候我们说我们都会做 Pooling,也就是一张</span><strong><span>影像做 Subsampling 以后,并不会影响我们对影像中物件的判读</span></strong></p><p><span>但是棋盘是这个样子吗,你可以把棋盘上的奇数行跟偶数列拿掉,还是同一个棋局吗,听起来好像不是对不对,下围棋这麼精细的任务,你随便拿掉一个 Column 拿掉一个 Row,整个棋整个局势就不一样啦,怎麼可能拿掉一个 Row 拿掉一个 Column,还会没有问题呢</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330172912802.png" alt="image-20210330172912802" style="zoom:50%;" /></p><p><span>所以有人就会说,啊 CNN 裡面就是要有 Pooling,然后影像辨识都是用 Pooling,所以 AlphaGo 也一定有用 Pooling,所以代表 AlphaGo 很烂啊,针对 Pooling 这个弱点去攻击它,一定就可以把它打爆,真的是这样吗</span></p><p><span>可是 AlphaGo 又这麼强,显然它没有这麼显而易见的弱点,所以这个问题就让我有点困扰,好 但后来我就去仔细读了一下,AlphaGo 那篇 Paper</span></p><p><span>其实 AlphaGo 在 Nature 上的 Paper,其实没有多长,大概就,我记得就五 六页而已,所以其实你一下子就可以看完了,而且在这个文章的正文裡面,甚至没有提它用的网路架构是什麼样子,它没有讲 Network 架构的细节,这个细节在哪裡呢,这个细节在附件裡面,所以我就仔细读了一下附件,看看说 AlphaGo 的网路结构长什麼样子</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330183705782.png" alt="image-20210330183705782" style="zoom:50%;" /></p><p><span>我们就来看一下,这个附件裡面是怎麼描述,AlphaGo 的类神经网路结构的,它先说呢</span></p><ul><li><span>我们把一个棋盘,看作 19 × 19 × 48 那麼大小的 Image</span></li><li><span>接下来它说它有做 Zero Padding,Padding 这件事我们有讲嘛,就是你的 Filter 如果超出影像的范围就补 0,Zero Padding 就是超出范围就补 0 的意思</span></li><li><span>它说它的 Filter 的大小啊,Kernel Size 就是 Filter 的大小是 5 × 5</span></li><li><span>然后有 k 个 Filter,k 是多少,k 是 192,这当然是试出来的啦,它也试了 128 跟 256 发现 192 最好了,好 这是第一层</span></li><li><span>然后 Stride=1,Stride 是什麼 我们刚才也解释过了</span></li><li><span>然后这边有用了 Rectifier Nonlinearity,这是什麼,这个就是 ReLU 啦,这个就是 ReLU</span></li><li><span>然后在第二层呢,到第 12 层都有做 Zero Padding,然后呢 这个 Kernel Size 都是 3 × 3,一样是 k 个 Filter,也就是每一层都是 192 个 Filter,Stride 呢 一样设 1,就这样叠了很多层以后呢,因為是一个分类的问题</span></li><li><span>最后加上了一个 Softmax</span></li></ul><p><span>读完以后你有发现什麼玄机吗,发现它</span><mark><span>没有用 Pooling</span></mark><span> </span></p><p><span>所以这给我们一个很好的例子就是,类神经网路的设计这个</span><mark><span>应用之道,存乎一心</span></mark></p><p><span>你不要看影像上面都有用 Pooling,就觉得 Pooling 一定是好的,在下围棋的时候就是不适合用 Pooling,所以你要想清楚说,你今天用一个 Network 架构的时候,我这个 Network 的架构到底代表什麼意思,它适不适合用在我现在这个任务上,</span></p><h3><a name="more-applications" class="md-header-anchor"></a><span>More Applications</span></h3><p><span>而那 CNN 呢,除了下围棋还有影像以外,欸 近年来也用在语音上,也用在文字处理上,这边我们就不再细讲</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330184018834.png" alt="image-20210330184018834" style="zoom:50%;" /></p><p><span>但是呢 你如果你真的想把 CNN 用在语音上,用在这个文字处理上,你要仔细看一下文献上的方法</span></p><p><span>这个在影像 在语音上,在文字上,那个 Receptive Field 的设计啊,这个参数共享的设计啊,跟影像上不是一样的</span></p><p><span>所以你要想清楚,那些 Receptive Field 用在语音,用在文字上的设计跟影像上不是一样,是考虑了语音跟文字的特性以后所设计的</span></p><p><span>所以你不要以為在影像上的 CNN,直接套到语音上它也 Work,可能是不 Work 的,你要想清楚说影像,语音有什麼样的特性,那你要怎麼设计合适的 Receptive Field,</span></p><h3><a name="to-learn-more" class="md-header-anchor"></a><span>To learn more</span></h3><p><span>有人会说 CNN,其实 CNN,它没有办法处理影像放大缩小,或者是旋转的问题,怎麼说呢,假设今天你给 CNN 看的狗都是这个大小,它可以辨识说这是一隻狗,当你把这个图片放大的时候,它可以辨识说牠还是一隻狗吗,可能是不行的</span></p><p><img src="https://gitee.com/unclestrong/deep-learning21_note/raw/master/imgbed/image-20210330184237888.png" alt="image-20210330184237888" style="zoom:50%;" /></p><p><span>你可能会想说 欸怎麼会不能够辨识呢,这两个形状不是一模一样啊,怎麼放大就不能辨识呢,CNN 这麼笨吗</span></p><p><span>它就是这麼笨,对它来说这两张图片,虽然这个形状是一模一样的,但是如果你把它拉长成向量的话,它裡面的数值就是不一样的啊,所以对 CNN 来说,虽然你人眼一看觉得它形状很像,但对 CNN 的 Network 来说它是非常不一样</span></p><p><span>所以事实上,CNN 并不能够处理影像放大缩小,或者是旋转的问题,当它今天在某种大小的影像上,假设你裡面的物件都是比较小的,它在上面学会做影像辨识,你把物件放大它就会整个惨掉</span></p><p><span>所以 CNN 并没有你想像的那麼强,那就是為什麼在做影像辨识的时候,往往都要做 </span><mark><span>Data Augmentation</span></mark><span>,所谓 Data Augmentation 的意思就是说,你把你的训练资料,每张图片都裡面截一小块出来放大,让 CNN 有看过不同大小的 Pattern,然后把图片旋转,让它有看过说,某一个物件旋转以后长什麼样子,CNN 才会做到好的结果</span></p><p><span>那你说 欸 CNN 这个不能够处理 Scaling,跟 Rotation 的问题啊,那有没有什麼 Network 架构,是可以处理这个问题呢,其实有的,有一个架构叫 </span><strong><span>Special Transformer Layer</span></strong><span>,我们不会讲它,就把它的这个录影的连结放在这边,给大家参考</span></p></div>
</body>
</html>